使用 R 编程连接列中的唯一值,但如果列中已存在任何值,则重置连接

Concatenate unique values from a column, but reset concatenation if any of the value already exists in the column using R programming

这是一个df

id   name   
1    A  
1    B  
1    C   
1    A  
1    A  
2    C  
2    D  

具有计算列的所需输出

id   name calculated_column  
1    A    A,B,C  
1    B    A,B,C  
1    C    A,B,C  
1    A    A,B,C  
1    B    A,B,C  
1    C    A,B,C      
1    B    B,C    
1    C    B,C    
1    A    A  
1    A    A  
1    A    A  
2    C    C,D  
2    D    C,D  

我想我也许可以创建一个序列列并进行串联,但我真的卡住了。
我想使用 dplyr,但我愿意接受其他建议。

df <- df %>% 
  group_by(id) %>% 
  arrange(date) %>% 
  mutate(calculated_column = ... ?)

一个data.table解决方案:

library(data.table)

dt <- data.table(id = c(rep(1L, 11), rep(2L, 2)), nm = LETTERS[c(1,2,3,1,2,3,2,3,1,1,1,3,4)])
dt[, grp := nm <= shift(nm, fill = Inf), by = id][, grp := cumsum(grp)][, calc := .(.(nm)), by = grp][, c("nm", "calc")]
#>     nm  calc
#>  1:  A A,B,C
#>  2:  B A,B,C
#>  3:  C A,B,C
#>  4:  A A,B,C
#>  5:  B A,B,C
#>  6:  C A,B,C
#>  7:  B   B,C
#>  8:  C   B,C
#>  9:  A     A
#> 10:  A     A
#> 11:  A     A
#> 12:  C   C,D
#> 13:  D   C,D