让我有一个列表(list1),其中包含数据帧(df1,df2,.. dfn),其中每个数据帧具有不同的列数。
让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
我想删除行中所有elemet(行与indx行除外)都是NA的行。
所以输出应该是(list2)
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执行此操作?我会很高兴任何帮助。非常感谢。
答案 0 :(得分:2)
我们可以使用list
循环lapply
,在逻辑矩阵(rowSums
)上获取!is.na(x[-1])
,通过检查元素不相等来转换为逻辑向量为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