9

次のようなデータフレームがあります。

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が1つの行/列に収まるように、最後の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  

重複を削除して列を合計する人の例を見つけましたが、1つの列のリストですべてのIDと重複する領域を組み合わせたいだけです。

4

1 に答える 1

11

いくつかの呼び出し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=", "))

2つのオプションの結果を比較します。

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"
于 2013-01-10T16:43:16.817 に答える