ich eine data.table haben wie folgtdata.table in verschachtelte Liste
## 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)]
Die resultierende Tabelle wird,
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>
Jetzt möchte ich aus dieser Daten eine Liste erhalten. Tabelle so, dass mdl
innerhalb jedes country
liegen sollte, das selbst innerhalb continent
verschachtelt wird.
Ich habe versucht, wie das Ergebnis zu erhalten,
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))
Gibt es eine elegante Art und Weise, dies zu tun?
Sie sollten '? Split.data.table' lesen und dort auch Beispiele suchen. Die Methode 'split' data.table kann verschachtelte Listen erzeugen. Stellen Sie sicher, dass Sie aktualisieren, da 'split.data.table' in v1.9.8 eingeführt wurde. Es ist OK, SO Frage selbst zu beantworten. – jangorecki
@jangorecki Bitte posten Sie eine Antwort. Ich bin neugierig, wie das geht und konnte es nicht herausfinden, nur bis zum 'Split (my_tab, by = c (" Kontinent "," Land "), keep.by = FALSE, flatten = FALSE)' wobei 'my_tab' die Tabelle ist, die so modifiziert wurde, dass sie char-Spalten anstelle von Faktoren enthält (da die letztere einen Fehler verursacht, der offensichtlich mit Spaltenbeschränkungen von' dogroups' zusammenhängt). – Frank
@Frank danke für info, schau hinein – jangorecki