【发布时间】:2014-06-26 16:37:22
【问题描述】:
如何根据条件对数据框列表进行子集化?这可能是重复的,但我在 SO 上找不到它!
样本数据:
data1 <- data.frame(ID=c(1,1),Name1=c(3,2),Name2=c(4,5),Name3=c(6,7),Name4=c(8,9))
data2 <- data.frame(ID=c(2,2),Name4=c(7,3),Name2=c(3,1),Name3=c(2,2),Name1=c(1,1))
data3 <- data.frame(ID=c(3),Name3=c(6),Name1=c(2),Name4=c(3),Name2=c(2))
data4 <- data.frame(ID=c(4,4),Name2=c(5,7),Name3=c(1,1),Name1=c(9,1),Name4=c(3,3))
listData <- list(data1,data2,data3,data4)
通常使用 data.frame 它只是:
df <- data.frame(do.call(rbind, listData))
df[df$ID==3,]
这样我只会得到 ID 号为 3 的行。 如何在列表中进行子集化?谢谢。
编辑:所需的输出将只是单个条目(列表),例如:
[[3]]
ID Name3 Name1 Name4 Name2
1 3 6 2 3 2
或者只是一行(data.frame):
ID Name3 Name1 Name4 Name2
1 3 6 2 3 2
【问题讨论】:
-
在这种情况下,您希望结果是什么样的?
lapply(listData, function(x) x[x$ID == 3, ])之类的东西应该适用于子集。 -
是的,我已经尝试过你的解决方案,我也得到了空列表。我的列表很大,我只需要匹配的行。
-
为什么不绑定do.call然后
do.call(rbind,lapply(listData,function (x) x[x$ID==3,]))?
标签: r