R:按行内容排列的数据框子集列表? lapply/sapply
R: Subset list of data frames by row content? 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)
只有子集 data.frames 包含 b == 2006
如何 select / 仅子集数据框 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
不清楚我们是否需要 subset
data.frame
的 list
与 'b' 列具有 any
2007 元素或 all
作为 2007 年。从示例中假设它是 all
2007,我们将 Filter
与匿名函数调用一起使用,并将 all
包裹在逻辑索引 (x$b ==2007
) 周围获得单个 TRUE/FALSE
来子集 list
元素。
Filter(function(x) all(x$b==2007), my.ls)
或者使用 sapply
,我们沿着 list
元素循环并使用相同的 logical
条件 return 每个 [=] 一个 TRUE/FALSE
13=] 元素。使用逻辑索引的 vector
对 list
.
进行子集化
my.ls[sapply(my.ls, function(x) all(x$b==2007))]
我有一个数据框列表:
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
如何 select / 仅子集数据框 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
不清楚我们是否需要 subset
data.frame
的 list
与 'b' 列具有 any
2007 元素或 all
作为 2007 年。从示例中假设它是 all
2007,我们将 Filter
与匿名函数调用一起使用,并将 all
包裹在逻辑索引 (x$b ==2007
) 周围获得单个 TRUE/FALSE
来子集 list
元素。
Filter(function(x) all(x$b==2007), my.ls)
或者使用 sapply
,我们沿着 list
元素循环并使用相同的 logical
条件 return 每个 [=] 一个 TRUE/FALSE
13=] 元素。使用逻辑索引的 vector
对 list
.
my.ls[sapply(my.ls, function(x) all(x$b==2007))]