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 R
aggregate
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
我在 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 R
aggregate
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