2016-10-15 11 views
3

で唯一のユニークなエントリを保持、私は次のように私はRのデータフレームを持つRの初心者です:同じIDを持つ行を集計し、R

Id   Values 
A_0_d Low_5524; Low_6412; Hi_50567 
A_0_d Low_5509; Low_6412; Low_6897; Hi_16021 
A_0_d Low_5524; Low_4930; Low_5886 
B_1_d Low_3697; Low_4519; Low_5524 
C_3_d Low_5576; Low_5581 
C_3_d Hi_30246 
C_3_d Low_5576; Hi_30246 

私はのIdsすなわちに基づいてデータフレームを集約したいと思いますグループ唯一のユニークなエントリが好きなすべての単一の行で同じIDの値と保持は次のとおりです。

A_0_d Low_5524; Low_6412; Hi_50567; Low_5509; Low_6897; Hi_16021; Low_4930; Low_5886 
B_1_d Low_3697; Low_4519; Low_5524 
C_3_d Low_5576; Low_5581; Hi_30246 

は私が集約function.Kindlyの使用が私を導くことができます。

答えて

2

'data.frame'を 'data.table'(setDT(df1))に変換します。その後、aggregateを使用して一緒に 'のIds' でグループ化した後"; "によってsplit '値'、unlist出力、unique要素を取得し、pasteそれを

library(data.table) 
setDT(df1)[, .(Values = paste(unique(unlist(strsplit(Values, "; "))), 
               collapse="; ")), by = Id] 
# Id 
#1: A_0_d 
#2: B_1_d 
#3: C_3_d 
#                   Values 
#1: Low_5524; Low_6412; Hi_50567; Low_5509; Low_6897; Hi_16021; Low_4930; Low_5886 
#2:             Low_3697; Low_4519; Low_5524 
#3:             Low_5576; Low_5581; Hi_30246 
3

あなたはaggregateを使用して、この

aggregate(Values ~ Id, df, function(x) paste(unique(x), collapse = '; ')) 
2

を試みることができますあなたはできます

aggregate(Values~Id, df, function(x) unique(unlist(strsplit(x, ";")))) 

# Id                   Values 
#1 A_0_d Low_5524, Low_6412, Hi_50567, Low_5509, Low_6897, Hi_16021, Low_4930, Low_5886 
#2 B_1_d             Low_3697, Low_4519, Low_5524 
#3 C_3_d             Low_5576, Low_5581, Hi_30246 
関連する問題