У меня есть 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 (« континент »,« страна »), keep.by = FALSE, flatten = FALSE)' где 'my_tab' - это таблица, модифицированная так, чтобы иметь столбцы столбцов вместо коэффициентов (поскольку последний выдает ошибку, по-видимому, связанную с ограничениями столбцов' догрупп'). – Frank
@Frank благодарит за информацию, заглянет в нее – jangorecki