2013-08-28 48 views
2

我們都知道R.中的函數table我正在尋找一個函數,以便在使用table(x,y)時獲得相同的輸出,但不能計算x和y值的每個組合的計數,但是對於另一個變量ž。在data.table中,這可以通過dt[,sum(z),by=c("x","y")]來實現。但是,這並沒有給我一個與表(x,y)相等的輸出。我試圖dcast也沒有得到我想要的東西計數變量按兩個變量分組

dt <- data.table(y=rep(letters[1:2],each=3),x=rep(letters[1:2],length=6),z=rep(letters [7],length=6)) 
    y x z 
1: a a g 
2: a b g 
3: a a g 
4: b b g 
5: b a g 
6: b b g 

應該有這樣的輸出,但克數:

y 
x a b 
    a 2 1 
    b 1 2 

我想有這些結果,但在形式一個表:

x y V1 
1: a a 2 
2: b a 1 
3: b b 2 
4: a b 1 

回答

2
DF <- data.frame(y=rep(letters[1:2],each=3), 
       x=rep(letters[1:2],length=6), 
       z=rep(letters [7],length=6)) 

tapply(X=DF$z, INDEX=list(DF$x, DF$y), FUN=length) 
# a b 
#a 2 1 
#b 1 2 
+0

謝謝,這是有趣的,我完全忘了tapply而與data.table工作! – beginneR

1

你可以嘗試使用包 'plyr'

install.packages('plyr'); 
library('plyr'); 
ddply(dt,.variables=c("y","x"),.fun=count)[,c(1:2,4)]; 

y x freq 
1 a a 2 
2 a b 1 
3 b a 1 
4 b b 2 
+1

但這不是他們要求的。 – Roland