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

时间:2016-03-01 17:55:25

标签: r subset lapply sapply

我有一个数据框列表:

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)

仅包含b == 2006

的data.frames子集

如何选择/仅对数据框进行选择 b == 2007

我确信这很简单

my.ls[sapply(my.ls[[i]]$b) == 2007]

但我无法弄清楚...... 如何访问数据框列表中的行?谢谢!

比较结果:

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 个答案:

答案 0 :(得分:4)

目前尚不清楚我们是否需要subset list data.frameany个'b'列包含all 2007个元素或all个作为示例,假设它是Filter 2007,我们使用all进行匿名函数调用并围绕逻辑索引(x$b ==2007)包装TRUE/FALSE以获得单个list要对Filter(function(x) all(x$b==2007), my.ls) 元素进行分组。

sapply

或者使用list,我们循环logical元素并使用相同的TRUE/FALSE条件为每个list元素返回单个vector。使用list逻辑索引对my.ls[sapply(my.ls, function(x) all(x$b==2007))]

进行子集化
<form method="post" enctype="multipart/form-data">