如何根据另一列(在数据集中)中的条目删除列重复项

时间:2012-07-02 22:07:06

标签: r duplicates duplicate-removal duplicate-data

我有一个看起来像的数据集:

    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]),]

我希望我的解决方案在于对此的一些修改,我还没有发现。谢谢你的帮助!

1 个答案:

答案 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