我有一个看起来像的数据集:
ColA ColB ColC ColD ColE
rs778 C Can + C/T
rs778 C Pro + C/T
rs779 P Can + A/G
rs779 P Can - A/G
我想基于C列删除A列中的重复条目。换句话说,如果A列中的两个条目相同,我希望保留的行由C列中的条目确定。如果条目在C列中是相同的,那么留下的行应该由D列确定。如果“Can”> “Pro”和“+”> “ - ”,那么我正在寻找的最终输出将是这样的:
ColA ColB ColC ColD ColE
rs778 C Can + C/T
rs779 P Can + A/G
我使用以下方法删除了完全重复的数据:
data2 <- data[!duplicated(data[-2]),]
我希望我的解决方案在于对此的一些修改,我还没有发现。谢谢你的帮助!
答案 0 :(得分:4)
这是一个可以实现您所需要的解决方案,但可能不是最优雅的方法。
data = read.table(header=TRUE, stringsAsFactors=FALSE,
text="ColA ColB ColC ColD ColE
rs778 C Can + C/T
rs778 C Pro + C/T
rs779 P Can + A/G
rs779 P Can - A/G")
# Convert ColC and ColD to factors, controlling sort order with levels arg.
# "Can" will sort before "Pro", and "+" will sort before "-".
data$ColC = factor(data$ColC, levels=c("Can", "Pro"))
data$ColD = factor(data$ColD, levels=c("+", "-"))
# Sort rows.
data = data[order(data$ColA, data$ColC, data$ColD), ]
# Works because prefered ColA duplicate sorts highest.
data2 = data[!duplicated(data$ColA), ]
data2
# ColA ColB ColC ColD ColE
# 1 rs778 C Can + C/T
# 3 rs779 P Can + A/G