2016-04-03 44 views
1

让我有一个列表(list1),其中包含数据帧(df1,df2,..dfn),其中每个数据帧具有不同的列数。删除所有元素缺失的列R中的值

list1[[1]]

df1: 

indx v1 v2 
1  23 45 
2  NA 34 
3  NA NA 
4  NA NA 
5  56 NA 

df2: 

indx v9 v6 
1  5 15 
2  11 78 
3  16 NA 
4  NA NA 
5  NA 8 

我想删除行,其中中行的所有elemetns(除INDX行)是NA。

所以输出中应为(列表2)

list2[[1]]

df1: 

indx v1 v2 
1  23 45 
2  NA 34 
5  56 NA 

df2: 

indx v9 v6 
1  5 15 
2  11 78 
3  16 NA 
5  NA 8 

我怎样才能做到这一点,使用R?我会很高兴有任何帮助。非常感谢。

回答

2

我们可以循环通过listlapply,得到的逻辑矩阵(!is.na(x[-1]))的rowSums,转换为逻辑向量通过检查元素不等于0,并使用该子集到的行。

lapply(list1, function(x) x[!!rowSums(!is.na(x[-1])),]) 
#$df1 
# indx v1 v2 
#1 1 23 45 
#2 2 NA 34 
#5 5 56 NA 

#$df2 
# indx v9 v6 
#1 1 5 15 
#2 2 11 78 
#3 3 16 NA 
#5 5 NA 8