1

次のようなデータセットがあります。

    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の2つのエントリが同じである場合、残りの行は列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]),]

そして、私の解決策が、私がまだ発見していないこれのいくつかの修正にあることを望んでいます。ご協力いただきありがとうございます!

4

1 に答える 1

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
于 2012-07-02T23:24:33.587 に答える