折叠的行,其中一些全为NA,其他行与某些NA不相交

我有这样一个简单的数据框:


ID    Col1    Col2    Col3    Col4

1     NA      NA      NA      NA  

1     5       10      NA      NA

1     NA      NA      15      20

2     NA      NA      NA      NA  

2     25      30      NA      NA

2     NA      NA      35      40 

我想这样重新格式化:


ID    Col1    Col2    Col3    Col4

1     5       10      15      20

2     25      30      35      40

(请注意:实际数据集有数千行,其值来自生物学数据NA-s不遵循简单的模式,除了NAs不相交,是的,每个正好有3行ID)。


步骤1:摆脱仅包含NA值的行。


从表面上看,这看起来很简单,但是我遇到了一些问题。


complete.cases(DF)返回all FALSE,所以我不能真正使用它来删除所有带有NAs 的行,如中所示DF[complete.cases(DF),]。这是因为所有行都至少包含一个NA。


由于NAs想要传播自己,因此其他使用is.na相同方案的失败。


第二步:将剩余的两行折叠为一。


考虑使用类似的aggregate方法,但是必须有一个比this更简单的方法,这根本行不通。


感谢您的任何建议。


慕的地8271018
浏览 511回答 3
3回答

慕妹3242003

以下是一些汇总尝试:aggregate(. ~ ID, data=dat, FUN=na.omit, na.action="na.pass")#  ID Col1 Col2 Col3 Col4#1  1    5   10   15   20#2  2   25   30   35   40由于aggregate默认情况下,公式接口na.omit会在进行任何分组之前使用整个数据,因此它将删除其中的每一行,dat因为它们都至少包含一个NA值。试试看:nrow(na.omit(dat))return 0。因此,在这种情况下,请使用na.passin aggregate,然后na.omit跳过NA通过的。或者,不要使用公式接口并指定要手动汇总的列:aggregate(dat[-1], dat[1], FUN=na.omit )aggregate(dat[c("Col1","Col2","Col3","Col4")], dat["ID"], FUN=na.omit)#  ID Col1 Col2 Col3 Col4#1  1    5   10   15   20#2  2   25   30   35   40
打开App,查看更多内容
随时随地看视频慕课网APP