2014-01-13 42 views
0
tnt <- data.frame(g = rep(letters[1:2], each = 5), x = c(1:5,2:6), y = "things") 

library(plyr) 
ddply(tnt, .(g,x), summarise, count = length(y)) 

分組因子各級考慮到在每個g組中計數的行數爲每個x值上面的代碼:表示與ddply

什麼是具有在所表示的電平6最簡單的方法a1代表b?即在所有級別g中代表的所有級別x

我的解決方案將使用as.data.frame(table(x))將每個ddply塊的級別重置爲1:6,但看起來很麻煩。

(如果最簡單的方法涉及基地,我不依賴於使用plyr)


編輯

的由@rrs回答是偉大的(+1),但是,這是我的在嘗試創建一個簡單的例子時,我簡化了這個問題。有許多因素,分組(不只是g),當我嘗試.drop = FALSE我得到以下錯誤:

Error: length(rows) == 1 is not TRUE

我認爲這可能是因爲nevor一起,決不應該發生的許多分組因素。我怎樣才能做到以下幾點:

c4 <- data.frame(g = rep(letters[1:2], each = 5), 
        f = c(sample(letters[24:25], 5, replace = TRUE), 
         sample(letters[25:26], 5, replace = TRUE)), 
        x = c(1:5,2:6), 
        y = "things") 


ddply(c4, .(g,f,x), summarise, count = length(y), .drop = FALSE) 

.drop = FALSE應只適用於xgf即應該有a沒有z

+0

您可能需要返工您編輯的例子。當我看着'c4'時,我在第22,24,26,28和30行看到了「z」和「a」。 – rrs

+0

感謝@rrs現在糾正了它。 – user1320502

+0

我在編輯中運行了你的代碼,沒有「z」和「a」在一起的行。它有什麼問題嗎? – rrs

回答

2

使用.drop = FALSE

ddply(tnt, .(g,x), summarise, count = length(y), .drop = FALSE)