2016-05-06 60 views
0

獨特的計數我有一個數據,看起來像這樣找到的子類

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?

+2

什麼是'ITEM_SUBCLASS_COUNT'應該是什麼?猜測,可能是'sample%>%group_by(DEPT,CLASS,SUBCLASS)%>%mutate(ITEM_SUBCLASS_COUNT = n())' – alistaire

回答

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)) 
+0

爲什麼要「。」在'。(DEPT,CLASS,SUBCLASS)'之前'而不是'list'? – PoGibas

+1

@Pgibas是的,你是對的。它取代了'list'命令。 – akrun

+1

@Pgibas如果你有興趣,可以看看[vignettes](https://github.com/Rdatatable/data.table/wiki/Getting-started)。 – Arun