给定具有唯一列名称的数据帧列表,最终目标是提取行,其中这些列按顺序匹配每个数据帧的条件。例如:
Sp1<-c("Elm","Maple","Oak")
Sp2<-c("Elm", "Aspen", "Oak")
Height1<-c(2,4,6)
Height2<-c(4,6,8)
Site_1<-data.frame(Sp1,Height1)
Site_2<-data.frame(Sp2,Height2)
Tree_List<-list(Site_1=Site_1,Site_2=Site_2)
现在开始我知道如果我执行以下代码,它将为单个选择返回所需的输出:
subset(Tree_List[[1]], Tree_List[[1]][1]=="Elm")
我也知道如果我按照其特定名称调用列,我可以提取多个选择的所需输出:
subset(Tree_List[[1]], Sp1 %in% c("Elm","Oak"))
由于我在列表中的所有数据帧上使用for循环迭代,列号相同但列名不同,我的尝试是:
subset(Tree_List[[1]], Tree_List[[1]][1] %in% c("Elm","Oak"))
这很遗憾地返回
的输出<0 rows> (or 0-length row.names)
而不是所需的输出。有什么想法吗?
答案 0 :(得分:1)
我们可以使用lapply
来循环list
data.frame和subset
lapply(Tree_List, function(x) x[x[,1] %in% c("Elm", "Oak"),])
关于OP代码中的问题,Tree_List[[1]][1]
仍然是data.frame
,其中包含一列。我们需要将列提取为vector
subset(Tree_List[[1]], Tree_List[[1]][,1] %in% c("Elm","Oak"))
# Sp1 Height1
#1 Elm 2
#3 Oak 6