2017-08-22 8 views
3

解決策が見つからない特定のRデータフレームに関する質問があります。以下のようになります同じ情報を含み、残りの部分を削除する行を合計する

私は同じ情報(重複またはId1の/ Id2との組み合わせ)を持つデータフレームを持っている:私は達成したい何

df_test <- data.frame(Id1= c("1", "1", "2", "3", "11", "5", "6", "7"), 
         Id2= c("4", "4", "6", "11", "3", "6", "2", "9")) 
df_test 

    Id1 Id2 
1 1 4 
2 1 4 
3 2 6 
4 3 11 
5 11 3 
6 5 6 
7 6 2 
8 7 9 

は、すべての重複と同じ情報をカウントデータフレームであります行を別の列に入れて、1行ずつ保持するだけです。課題は重複を認識するだけでなく、同じId1/Id2の組み合わせも認識することです。以下のような何か:

df_sol 
     Id1 Id2 Sum 
    1 1 4 2 
    2 2 6 2 
    3 3 11 2 
    4 5 6 1 
    5 7 9 1 

私はaggregatesummariseを試してみましたが、私はまだ解決策をそこに見つけることができませんでした。もう1つの考えはigraphパッケージを使用してedgelistのように扱い、次にedge.attr.comb = list(weight= "sum")のように扱いましたか?あなたは、ソート行第一に、これを使用してすることができます

#dataframe for solution: 
    df_sol <- data.frame(Id1= c("1", "2", "3", "5", "7"), 
          Id2= c("4", "6", "11", "6", "9"), 
          Sum =c("2", "2", "2", "1", "1")) 
+0

関連:(1)[アルファベット順に行をソート](https://stackoverflow.com/questions/31752475/r-sorting-each-row-of-a-data-frame? noredirect = 1&lq = 1)、または[データフレームの各行をソートする](https://stackoverflow.com/questions/31752475/r-sorting-each-row-of-a-data-f rame?noredirect = 1&lq = 1)。 (2)[各グループ内の行数をカウントする](https://stackoverflow.com/questions/9809166/count-number-of-rows-within-each-group) – Henrik

答えて

5

事前に

おかげで、順序がdf_testデータ型は、あなたの中に、すべての文字あなたの出力、原因は異なるされている。(あなたが得る数値に変更しますあなたが望む結果)

A=data.frame(t(apply(df_test, 1, sort))) 
A=dplyr::count(A,X1,X2) 
names(A)=c('Id1','Id2','Sum') 

# A tibble: 5 x 3 
    Id1 Id2 Sum 
    <fctr> <fctr> <int> 
1  1  4  2 
2  11  3  2 
3  2  6  2 
4  5  6  1 
5  7  9  1 
+2

スマートなソリューションは、さらに多くの列に簡単に拡張することができます! –

関連する問題