我有一个数据框列表:
d1<-data.frame(a=rnorm(5), b=rep(2006, times=5), cc=c(1:5))
d2<-data.frame(a=rnorm(5), b=rep(2007, times=5), cc=c(1:5))
d3<-data.frame(a=rnorm(5), b=c(2005:2009), cc=c(1:5)) #data frame with only one 2007 value
d4<-data.frame(a=rnorm(5), b=rep(2007, times=5), cc=c(1:5))
my.ls<- list(d1, d2, d3,d4)
仅子集data.frames包含b == 2006
how to select / subset only a dataframe where b == 2007
?
我确信这很简单
my.ls[sapply(my.ls[[i]]$b) == 2007]
但我无法弄清楚...... How can I access rows in list of data frames? 谢谢!
比较结果:
a1<-Filter(function(x) all(x$b==2007), my.ls)
a2<-my.ls[sapply(my.ls, function(x) all(x$b==2007))]
> identical(a1, a2)
[1] TRUE
1 回答
目前尚不清楚我们是否需要
list
data.frame
列'b'列any
2007元素或all
作为2007.假设从示例中,它是all
2007,我们使用Filter
与匿名函数调用并包围all
逻辑索引(x$b ==2007
)获取单个TRUE/FALSE
以list
元素的子集 .或者使用
sapply
,我们循环list
元素并使用相同的logical
条件为每个list
元素返回单个TRUE/FALSE
. 使用vector
逻辑索引对list
进行子集化 .