R语言-多列按一列分组的计数

R language - count of multiple columns group by one column

我在 R 中得到的数据框如下所示:

> df
   c1 c2 c3
1: 10 c1 i1
2: 10 c1 i2
3: 10 c1 i3
4: 10 c2 i1
5: 10 c2 i2
6: 10 c2 i3
7: 20 c11 i1
8: 20 c11 i2
9: 20 c11 i3
10: 20 c12 i1
11: 20 c12 i2
12: 20 c12 i3

我需要按 c1 对列 c2 和 c3 的不同计数求和 - 以获得以下结果:

10 2 3
20 2 3

我如何在 R 中完成它?

谢谢

使用base Raggregate

aggregate(cbind(c2,c3)~c1, df, function(x) length(unique(x)))


#  c1 c2 c3
#1 10  2  3
#2 20  2  3

由于 OP 的数据集看起来像 data.table,我们可以使用 data.table 方法。将 'data.frame' 转换为 'data.table'(setDT(df1) - 如果它是 'data.frame'),按 'c1' 分组,我们遍历 Data.table 的子集(.SD) 并找到 unique 个元素 (uniqueN) 中的 length

library(data.table)
setDT(df1)[, lapply(.SD, uniqueN), by= c1]
#   c1 c2 c3
#1: 10  2  3
#2: 20  2  3