繁体   English   中英

如何从具有两个因素的数据框中创建嵌套列表?

[英]How to create nested list from data frame with two factors?

我想从此数据框创建一个嵌套列表:

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

我先用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

现在,我想为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

但是,如何避免创建不存在var1和var2组合的空数据帧?

只需包装第二个参数即可拆分为droplevels 这将摆脱原来在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM