可以只用data.table,语法非常简洁
library(data.table)
dt = fread("
ID name A B
1 赵 1 10
1 赵 1 11
1 赵 2 8
2 钱 1 21
2 钱 1 19
3 孙 1 13
4 李 1 12
4 李 2 7
4 李 2 4
4 李 3 6")
dt[, lapply(.SD, function(x) paste(x, collapse = ",")), by=.(ID, A)]
#> ID A name B
#> 1: 1 1 赵,赵 10,11
#> 2: 1 2 赵 8
#> 3: 2 1 钱,钱 21,19
#> 4: 3 1 孙 13
#> 5: 4 1 李 12
#> 6: 4 2 李,李 7,4
#> 7: 4 3 李 6