[英]Subset list of dataframes in R
如何根据条件对数据帧列表进行子集化? 这可能重复,但我在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
如果你想保留列表中的值,可能会使用这样的东西:
names(listData) <- seq_along(listData) ## So we can identify which list item it came from
Subs <- lapply(listData, function(x) { y <- x[x$ID == 3, ]; if (nrow(y) == 0) NULL else y })
Subs[!sapply(Subs, is.null)]
$`3`
ID Name3 Name1 Name4 Name2
1 3 6 2 3 2
也:
listData[mapply(function(x,y) any(x==y),sapply(listData,`[`,1),3)]
#[[1]]
# ID Name3 Name1 Name4 Name2
#1 3 6 2 3 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.