我有一个看起来像这样的数据
sample <- data.frame(DEPT = c(1,1,1,1,2,2,2,2),CLASS = c(1,1,1,2,1,1,2,2),SUBCLASS= c(1,1,2,2,1,1,1,1),ID = c(101,102,103,104,105,106,107,108))
> sample
DEPT CLASS SUBCLASS ID
1 1 1 1 101
2 1 1 1 102
3 1 1 2 103
4 1 2 2 104
5 2 1 1 105
6 2 1 1 106
7 2 2 1 107
8 2 2 1 108
最终数据应如下所示
> sample
DEPT CLASS SUBCLASS ID ITEM_SUBCLASS_COUNT
1 1 1 1 101 2
2 1 1 1 102 2
3 1 1 2 103 1
4 1 2 2 104 1
5 2 1 1 105 2
6 2 1 1 106 2
7 2 2 1 107 2
8 2 2 1 108 2
如何使用dplyr实现这一目标?
答案 0 :(得分:1)
我们可以使用data.table
library(data.table)
setDT(sample)[,ITEM_SUBCLASS_COUNT := .N , .(DEPT, CLASS, SUBCLASS)]
或使用base R
sample$ITEM_SUBCLASS_COUNT <- with(sample, ave(seq_along(DEPT), DEPT,
CLASS, SUBCLASS, FUN = length))