R 按每行中的NAs数量拆分数据帧
考虑一个由数千行和数千列组成的数据框架,其中包括多个NAs。我想根据每行中的NAs数量将此数据帧拆分为更小的数据帧。包含相同数量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
> 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])))