[英]How to create nested list from data frame with two factors?
I'd like to create a nested list from this data frame: 我想从此数据框创建一个嵌套列表:
dat <- data.frame(var1 = c("A", "A", "B", "B"),
var2 = c("A_1", "A_2", "B_1", "B_2"),
val = 1:4)
> dat
var1 var2 val
1 A A_1 1
2 A A_2 2
3 B B_1 3
4 B B_2 4
I split the data frame by var1 first: 我先用var1分割数据帧:
mylist <- split(dat, dat$var1)
> mylist
$A
var1 var2 val
1 A A_1 1
2 A A_2 2
$B
var1 var2 val
3 B B_1 3
4 B B_2 4
Now I want to create nested lists for var2, I tried: 现在,我想为var2创建嵌套列表,我尝试过:
mylist <- lapply(mylist, function(x) split(x, x$var2))
> mylist
$A
$A$A_1
var1 var2 val
1 A A_1 1
$A$A_2
var1 var2 val
2 A A_2 2
$A$B_1
[1] var1 var2 val
<0 Zeilen> (oder row.names mit Länge 0)
$A$B_2
[1] var1 var2 val
<0 Zeilen> (oder row.names mit Länge 0)
$B
$B$A_1
[1] var1 var2 val
<0 Zeilen> (oder row.names mit Länge 0)
$B$A_2
[1] var1 var2 val
<0 Zeilen> (oder row.names mit Länge 0)
$B$B_1
var1 var2 val
3 B B_1 3
$B$B_2
var1 var2 val
4 B B_2 4
But how can I avoid the empty data frames of inexistent combinations of var1 and var2 being created? 但是,如何避免创建不存在var1和var2组合的空数据帧?
Just wrap the second argument to split in droplevels
. 只需包装第二个参数即可拆分为droplevels
。 This will get rid of the now extraneous factor levels that were constructed in the original data.frame. 这将摆脱原来在data.frame中构造的无关紧要的因素级别。
lapply(mylist, function(x) split(x, droplevels(x$var2)))
$A
$A$A_1
var1 var2 val
1 A A_1 1
$A$A_2
var1 var2 val
2 A A_2 2
$B
$B$B_1
var1 var2 val
3 B B_1 3
$B$B_2
var1 var2 val
4 B B_2 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.