Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对存储在列表中的data.frames进行子集划分?_R_List_Dataframe_Subset_Lapply - Fatal编程技术网

如何对存储在列表中的data.frames进行子集划分?

如何对存储在列表中的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

我创建了一个列表,并在每个组件中存储了一个数据帧。现在我想过滤那些数据帧,只保留在特定列中有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))  

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)