如何对存储在列表中的data.frames进行子集划分?
我创建了一个列表,并在每个组件中存储了一个数据帧。现在我想过滤那些数据帧,只保留在特定列中有NA的行。我希望此操作的结果是另一个包含数据帧的列表,其中只有那些列中有NA的行 这里有一些代码来澄清我所说的。假设如何对存储在列表中的data.frames进行子集划分?,r,list,dataframe,subset,lapply,R,List,Dataframe,Subset,Lapply,我创建了一个列表,并在每个组件中存储了一个数据帧。现在我想过滤那些数据帧,只保留在特定列中有NA的行。我希望此操作的结果是另一个包含数据帧的列表,其中只有那些列中有NA的行 这里有一些代码来澄清我所说的。假设d1和d2是我的数据帧 set.seed(1) d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA)) d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007)) prin
d1
和d2
是我的数据帧
set.seed(1)
d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))
print(d1)
a b
1.3011543 2006
0.3780023 2006
-0.3101449 2006
-1.3927445 2006
-1.0726218 NA
print(d2)
a b
1 2007
2 2007
3 NA
4 NA
5 2007
你能帮我克服我的严重限制吗?
lappy
的第二个参数是一个函数(subset
),而subset
的额外参数作为参数传递给lappy
。因此:
my.ls <- list(d1 = d1, d2 = d2)
my.lsNA <- lapply(my.ls, subset, is.na(b))
my.ls关于@Riccardo最后评论中的问题,请尝试:
lapply(my.ls, "[", 1)
或者:
lapply(my.ls, "[[", 1)
取决于您希望输出是数据帧列表还是向量列表。非常感谢。您在一个答案中教会了我两件事。假设我不想过滤NA,而是只保留每个数据帧的第一列,我可以使用什么命令?我认为命令my.ls2This适用于子集列:lapply(my.ls,“[”,1:2)
将保留列表中所有数据帧的第一列和第二列。
lapply(my.ls, "[", 1)
lapply(my.ls, "[[", 1)