2013-01-10 93 views
6

我有一個數據幀,看起來像這樣的ID的新列:中的R結合重複的行和加入含有重複

Chr start stop ref alt Hom/het ID 
chr1 5179574 5183384 ref Del Het 719 
chr1 5179574 5184738 ref Del Het 915 
chr1 5179574 5184738 ref Del Het 951 
chr1 5336806 5358384 ref Del Het 376 
chr1 5347979 5358384 ref Del Het 228 

我想合併任何重複行,最後一個ID列組合,使得所有ID是在一個行/列,例如:人刪除重複和累加列

Chr start stop ref alt Hom/het ID 
chr1 5179574 5183384 ref Del Het 719 
chr1 5179574 5184738 ref Del Het 915, 951 
chr1 5336806 5358384 ref Del Het 376 
chr1 5347979 5358384 ref Del Het 228 

我發現的例子,但我只是想和重複區域的所有ID在單個列組合在列表中。

+0

雖然它從相同的位置開始,但第一個序列似乎不是下兩個的重複因爲它有點長。你能澄清你在這個例子中定義爲「重複」嗎? – MattLBeck

+0

對不起,我的錯誤沒有密切關注我的例子。除了ID列以外,所有列中的重複都將完全匹配。 – user1967407

回答

7

有些電話aggregate()應該做的伎倆。

下面是收集的ID列表中的對象的選項:

(df1 <- aggregate(df[7], df[-7], unique)) 
# Chr start stop ref alt Hom.het  ID 
# 1 chr1 5179574 5183384 ref Del  Het  719 
# 2 chr1 5179574 5184738 ref Del  Het 915, 951 
# 3 chr1 5336806 5358384 ref Del  Het  376 
# 4 chr1 5347979 5358384 ref Del  Het  228 

這裏還有一個收集在一個字符向量:

df2 <- aggregate(df[7], df[-7], 
       FUN = function(X) paste(unique(X), collapse=", ")) 

兩個選項的結果比較:

str(df1$ID) 
# List of 4 
# $ 0: int 719 
# $ 3: int [1:2] 915 951 
# $ 7: int 376 
# $ 8: int 228 

str(df2$ID) 
# chr [1:4] "719" "915, 951" "376" "228" 
+1

+1也許指出'ID'變成了'list',而不是原子向量? –

+0

謝謝,這兩項工作都很好,我認爲最後一項最適合我的需求。 – user1967407

+0

謝謝@MatthewPlourde,只是做到了。 –