GROUP_CONCAT与dplyr或R

rik*_*urr 5 sql r group-concat dplyr

我很难在dplyr中复制典型SQL GROUP_CONCAT函数的功能.我还想确保可以控制组内的排序.理想情况下,我想使用hadleyverse/tidyverse,但基本R或其他包也可以使用.

示例数据:

ID    name
1     apple
1     orange
2     orange
3     orange
3     apple
Run Code Online (Sandbox Code Playgroud)

期望的输出:

ID    name
1     apple,orange
2     orange
3     apple,orange
Run Code Online (Sandbox Code Playgroud)

请注意,对于ID = 3,排序是按字母顺序排列的,而不是排序的排序方式.我认为这可以通过先做一个来处理arrange,但是在summarise语句等内部进行控制会很好.

akr*_*run 9

R,我们可以使用其中一个操作组.

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
Run Code Online (Sandbox Code Playgroud)

或使用 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
Run Code Online (Sandbox Code Playgroud)

  • 我认为`stringr :: str_c()`也可以使用:`str_c(unique(name),crash =“;”))`-这允许用户指定自定义分隔符。 (2认同)