2016-07-02 14 views
2

dplyrの典型的なSQL GROUP_CONCAT関数の機能を複製するのは難しいです。私はまた、グループ内の順序を制御できるようにしたいと思います。理想的には、私はhadleyverse/tidyverseを使用したいが、ベースRまたは他のパッケージもうまくいく。GROUP_CONCAT with dplyrまたはR

例データ:

ID name 
1  apple 
1  orange 
2  orange 
3  orange 
3  apple 

所望の出力:

ID name 
1  apple,orange 
2  orange 
3  apple,orange 

注ID = 3の場合、順序付けは、アルファオーダーであることはなく、行が順序付けされる方法。これはおそらく最初にarrangeを実行することで処理できると思いますが、summariseステートメントなどの内部を制御するのがよいでしょう。

答えて

4

Rでは、1つの操作でグループを使用できます。

library(dplyr) 
df1 %>% 
    group_by(ID) %>% 
    summarise(name = toString(sort(unique(name)))) 
#  ID   name 
# <int>   <chr> 
#1  1 apple, orange 
#2  2  orange 
#3  3 apple, orange 

または基地R使用についてdata.table

library(data.table) 
setDT(df1)[, .(name = toString(sort(unique(name)))), by = ID] 
# ID   name 
#1: 1 apple, orange 
#2: 2  orange 
#3: 3 apple, orange 
+1

nice答え、私はdata.tableが好きです – nik

1

を使用して、この

aggregate(data=df,name~ID,FUN = function(t) sort(paste(t))) 

データ

df<-read.table(header = T,text = "ID name 
1  apple 
1  orange 
2  orange 
3  orange 
3  apple")