我有一個data.table如下,data.table到嵌套表
## install.packages(c("gapminder", "data.table"))
library(gapminder)
library(data.table)
gapminder <- data.table(gapminder)
my_table <- gapminder[, .(mdl = .(lm(lifeExp ~ pop + gdpPercap,
data = gapminder))),
by = .(country, continent)]
結果表會,
country continent mdl
1: Afghanistan Asia <lm>
2: Albania Europe <lm>
3: Algeria Africa <lm>
4: Angola Africa <lm>
5: Argentina Americas <lm>
---
138: Vietnam Asia <lm>
139: West Bank and Gaza Asia <lm>
140: Yemen, Rep. Asia <lm>
141: Zambia Africa <lm>
142: Zimbabwe Africa <lm>
現在我希望得到一個列表出這個數據的。表mdl
應該位於每個country
之內,其本身嵌套在continent
內。
我試圖得到的結果是,
first_list <- split(my_table, my_table$continent)
second_list <- lapply(first_list, function(x){
split(x[, country := as.character(country)], x$country)
})
final_list <- sapply(second_list, function(x) sapply(x, function(y) y$mdl))
是否有任何優雅的方式來做到這一點?
你應該閱讀'?split.data.table'也檢查那裏的例子。 'split' data.table方法可以產生嵌套列表。請確保更新爲'split.data.table'在v1.9.8中引入。自我回答這個問題是可以的。 – jangorecki
@jangorecki請發表一個答案。我很好奇如何做到這一點,並不能解決它,只能達到'split(my_tab,by = c(「continent」,「country」),keep.by = FALSE,flatten = FALSE)其中'my_tab'是被修改爲具有char列而不是因素的表(因爲後者拋出顯然與'dogroups'的列限制有關的錯誤)。 – Frank
@Frank謝謝你的信息,將它看進去 – jangorecki