合并行以便合并值并忽略NAs

时间:2015-04-09 07:17:26

标签: r

我的数据框如下:

TIMEdbMerge CopyNumber  Study     Sample       HRE
TC015II         NA     TC015        II        neg       
TC015III        0      NA           NA        NA    
TC015III        NA     TC015        III       neg   
TC015Quadrantic NA     TC015    Quadrantic    24    
TC016I          NA     TC016         I        NA    
TC016II         1      NA           NA        NA      
TC016II         NA     TC016        II        neg   
TC016Quadrantic NA     TC016    Quadrantic    6 
TC017I          NA     TC017        I         NA    
TC017II          3      NA          NA        NA
TC017II         NA     TC017        II         +

这是一个复杂的合并,我没有时间去弄清楚。作为一种解决方法,我只想合并重复的行,以便行中的实际值替换重复对的NA,以便结果看起来像:

TIMEdbMerge CopyNumber  Study     Sample       HRE
TC015II         NA     TC015        II        neg           
TC015III        0      TC015        III       neg   
TC015           NA     TC015         Q        24    
TC016I          NA     TC016         I        NA    
TC016II         1      TC016        II        neg   
TC016Quadrantic NA     TC016    Quadrantic    6 
TC017I          NA     TC017        I         NA    
TC017II         3      TC017        II         +

我知道如何删除重复的行,但我不知道如何告诉r组合一个重复的行,但只有当它不是来自副本的任一行的NA时才使用该值。我应该使用汇总吗?

1 个答案:

答案 0 :(得分:3)

我们可以na.locf通过ave按每个组('TIMEdbMerge')中'CopyNumber'的非NA元素填充NA元素。然后将“研究”,“样本”,“HRE”列

中包含所有元素NA的行删除
library(zoo)
df1$CopyNumber <- with(df1, ave(CopyNumber, TIMEdbMerge,
     FUN=function(x) na.locf(x, na.rm=FALSE)))
df1[rowSums(is.na(df1[3:5]))!=3,]
#       TIMEdbMerge CopyNumber Study     Sample  HRE
#1          TC015II         NA TC015         II  neg
#3         TC015III          0 TC015        III  neg
#4  TC015Quadrantic         NA TC015 Quadrantic   24
#5           TC016I         NA TC016          I <NA>
#7          TC016II          1 TC016         II  neg
#8  TC016Quadrantic         NA TC016 Quadrantic    6
#9           TC017I         NA TC017          I <NA>
#11         TC017II          3 TC017         II    +

或者使用原始数据集的left_join(或merge)和数据集子集,其中只包含非NA行的“CopyNumber”,然后{{1如上所述,输出作为3列的NA的行。

base R

数据

filter