我有一个如下所示的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
应该位于每个嵌套在 continent
中的 country
内。我尝试了以下方法来获得结果:
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
数据表方法可以生成嵌套列表。请确保更新到v1.9.8中引入的split.data.table
。自我回答SO问题是可以的。 - jangoreckisplit(my_tab, by=c("continent", "country"), keep.by = FALSE, flatten = FALSE)
这一步,其中my_tab
是修改为字符列而不是因子的表格(因为后者会引发与dogroups
列限制相关的错误)。 - Frank