首页 文章

R:按行内容划分的数据帧子集? lapply / sapply

提问于
浏览
1

我有一个数据框列表:

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 回答

  • 4

    目前尚不清楚我们是否需要 list data.frame 列'b'列 any 2007元素或 all 作为2007.假设从示例中,它是 all 2007,我们使用 Filter 与匿名函数调用并包围 all 逻辑索引( x$b ==2007 )获取单个 TRUE/FALSElist 元素的子集 .

    Filter(function(x) all(x$b==2007), my.ls)
    

    或者使用 sapply ,我们循环 list 元素并使用相同的 logical 条件为每个 list 元素返回单个 TRUE/FALSE . 使用 vector 逻辑索引对 list 进行子集化 .

    my.ls[sapply(my.ls,  function(x) all(x$b==2007))]
    

相关问题