2012-07-02 18 views
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 

我想基於列刪除列A重複條目C.換一種方式,如果列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]),] 

,我希望我的解決辦法在於這個我還沒有發現一些修改。謝謝你的幫助!

回答

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 
+0

謝謝!在這種情況下,功能勝過恩典。 :] – mfk534