【问题标题】:Finding certain data frames in a list and combining those data frames在列表中查找某些数据帧并组合这些数据帧
【发布时间】:2014-03-11 21:16:23
【问题描述】:

我有一个名为 score.list 的包含 26 个数据帧的列表,并且我编写了一个代码来告诉我哪些数据帧不完整。所以这段代码给了我列表中数据框的名称,但它没有告诉我列表中数据框的索引。

示例...代码告诉我一个名为 p08 的数据框和另一个名为 p18 的数据框不完整。因此,它们需要与这些之后的任何数据帧相结合。所以如果名为p08的数据框是score.list[[8]],那么它应该与score.list[[9]]结合。它应该用新创建的数据框替换[[8]],然后应该从列表中删除score.list[[9]]

我猜类似下面的代码可能会用于合并和替换数据框...我不确定下面的代码是否有效..

score.list[[8]] <- rbind(score.list[[8]], score.list[[9]])

这是我尝试做的......但并不完全有效,因为它在组合后没有创建新的数据框。我收到此错误消息:

Error in if (names(score.list[i]) == names(score.list[i + 1])) { : 
  missing value where TRUE/FALSE needed

for(i in 1:length(score.list)){
  if(names(score.list[i])==names(score.list[i+1])) {
    a <- score.list[i]
    b <- score.list[i+1]
    score.list[[i]] <- rbind(a, b)
    print(score.list[[i]])
  }  
}

之所以写if(names(score.list[i]==names(score.list[i+1])),是因为列表中需要合并的数据框的名称相同。不完整的数据框与其后的数据框具有相同的名称。所以数据框的名称score.list[[8]]与数据框的名称score.list[[9]]相同。

如果有令人困惑的部分,请告诉我。我试图尽可能清楚地写出来。谢谢!

【问题讨论】:

  • 当修改你的列表时记住索引的变化,可能更容易让你的检查函数返回不完整的data.frames的索引,然后用那些需要合并的合并创建一个新列表
  • 嗯,好吧。只知道数据框的名称,如何找到数据框的索引?
  • 您可以使用which() 并匹配列表中的名称

标签: r for-loop dataframe


【解决方案1】:

这应该对你有帮助:

## a list example 
score.list <- 
list(l1= data.frame(x=1),
     l2=data.frame(x=2),
     l3= data.frame(x=3))
## use %in% to select some elements 
## here I am selecting list l1 and l3
do.call(rbind,
   score.list[names(score.list) %in% c('l1','l3')])

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2018-09-18
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2022-01-19
    • 2011-08-27
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多