【问题标题】:Process vector nested within a nested list in R嵌套在R中的嵌套列表中的过程向量
【发布时间】:2016-06-04 17:20:57
【问题描述】:

我有一个 listlists 和 vectors,如下所示:

myList = list(id1 = list(a=6:10,b=1:5),
              id2 = list(a=3:8,b = 4:9))

我想用任意function(例如meansum等)处理每个列表中名为“b”的第二个vector,并将结果附加到名为@987654329的第三个@ 在每个嵌套的 list 内实现类似:

myList2 = list(id1 = list(a=6:10,b=1:5,c = mean(1:5)),
          id2 = list(a=3:8,b = 4:9,c = mean(4:9)))

因此,我的问题分为两部分。首先,如何在每个嵌套的list 中只处理第二个名为vector 的?其次,如何将结果附加到每个嵌套的list

我知道我可以编写一个始终索引myList[[i]][[2]]for 循环,但我正在寻找一个矢量化解决方案。我尝试过使用各种组合apply-family 和匿名function,首先测试vector 的名称,例如:

rapply(myList, function(x) ifelse(names(x) == "b",
                              print("yes"),  #process vector
                              print("no")),  #move on to next x
   how = "list"
)

但结果没有多大意义。

附加信息:我使用嵌套的 lists 而不是 data.frame,因为我对每个 id 没有相同数量的观察,但我愿意接受可能绕过这些问题并适应的替代方法观察次数不同。

【问题讨论】:

  • 作为这种嵌套“列表”的替代方案,您可以考虑使用“长格式”“data.frame”,例如,从dat = do.call(rbind, Map(cbind, id = names(myList), lapply(myList, stack))) 获得——然后,您可以使用聚合操作喜欢aggregate(values ~ id, dat[dat$ind == "b", ], mean)

标签: r list vector


【解决方案1】:

应该这样做

lapply(myList, function(x) {
  x$c <- mean(x$b)
  return(x)
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多