R 按每行中的NAs数量拆分数据帧

R 按每行中的NAs数量拆分数据帧,r,dataframe,split,na,R,Dataframe,Split,Na,考虑一个由数千行和数千列组成的数据框架,其中包括多个NAs。我想根据每行中的NAs数量将此数据帧拆分为更小的数据帧。包含相同数量NAs的所有行(如果有)应位于同一组中。然后,新的数据帧将单独保存 > DF ID C1 C2 C3 C4 C5 aa 12 13 10 NA 12 ff 12 NA NA 23 13 ee 67 23 NA NA 21 jj 31 14 NA 41 11 ss NA 15 11 12 11 所需输出为: > DF_chunk_1 ID C

考虑一个由数千行和数千列组成的数据框架,其中包括多个NAs。我想根据每行中的NAs数量将此数据帧拆分为更小的数据帧。包含相同数量NAs的所有行(如果有)应位于同一组中。然后,新的数据帧将单独保存

> DF
ID  C1 C2 C3 C4 C5
aa  12 13 10 NA 12 
ff  12 NA NA 23 13
ee  67 23 NA NA 21
jj  31 14 NA 41 11
ss  NA 15 11 12 11
所需输出为:

> DF_chunk_1
ID  C1 C2 C3 C4 C5
aa  12 13 10 NA 12
jj  31 14 NA 41 11
ss  NA 15 11 12 11

> DF_chunk_2
ID  C1 C2 C3 C4 C5
ff  12 NA NA 23 13
ee  67 23 NA NA 21

我非常感谢您的建议。

请尝试以下有用的评论。您可以
split()
并使用
apply()
构建组:

#Code
new <- split(DF,apply(DF[,-1],1,function(x)sum(is.na(x))))
更实用的方法(非常感谢并感谢@RuiBarradas):

#代码2

新的指针可能是使用
sum(is.na(x))
将在
x
列中返回
na
s的数量这一事实。这也可以用于行。以秒为单位击败我,但我使用
split(DF,rowSums(is.na(DF[-1]))
@davide\u Cent首先执行此操作
names(new)@davide\u Cent在这种情况下,您将拥有一个组0,数据将在那里@注释中代码中的davide_Cent尝试此更改
sum(is.na(x))>=0
@davide_Cent或此
lappy(新,函数(x){x
$`1`
  ID C1 C2 C3 C4 C5
1 aa 12 13 10 NA 12
4 jj 31 14 NA 41 11
5 ss NA 15 11 12 11

$`2`
  ID C1 C2 C3 C4 C5
2 ff 12 NA NA 23 13
3 ee 67 23 NA NA 21
#Code2
new <- split(DF, rowSums(is.na(DF[-1])))