用ddply表示所有级别的分组因子

时间:2014-01-13 16:38:44

标签: r plyr

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

考虑上面的代码计算每个x组中每个g值的行数:

6中代表a1代表级别b的最简单方法是什么?即在x的所有级别中表示的g的所有级别。

我的解决方案是在将每个as.data.frame(table(x))块的级别重置为ddply后使用1:6,但这看起来很麻烦。

(如果最简单的方法涉及基础,我不依赖于使用plyr)


修改

by @rrs的答案很棒(+1),然而,在尝试创建一个简单的例子时,我简化了问题是我的错。有许多分组因素(不只是g),当我尝试.drop = FALSE时,我收到以下错误:

  

错误:长度(行)== 1不为TRUE

我认为这可能是因为许多分组因素一起发生而且永远不应该发生。我该怎么做:

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应仅适用于x而非[{1}}和g,即f中不应有z

1 个答案:

答案 0 :(得分:2)

使用.drop = FALSE

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