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
中代表a
和1
代表级别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
。
答案 0 :(得分:2)
使用.drop = FALSE
:
ddply(tnt, .(g,x), summarise, count = length(y), .drop = FALSE)