我的数据框如下:
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时才使用该值。我应该使用汇总吗?
答案 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