【问题标题】:How to create nested list from data frame with two factors?如何从具有两个因素的数据框中创建嵌套列表?
【发布时间】:2017-06-18 09:46:52
【问题描述】:

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

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 组合的空数据框?

【问题讨论】:

    标签: r list lapply


    【解决方案1】:

    只需将要拆分的第二个参数包装在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
    

    【讨论】:

    • 组合的绝佳选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2022-09-27
    • 2023-04-06
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多