【问题标题】:represent all levels of grouping factor with ddply用 ddply 表示所有级别的分组因子
【发布时间】:2014-01-13 16:38:44
【问题描述】:
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 组中的行数:

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

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

(如果最简单的方法涉及 base,我不会使用 plyr)


编辑

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

错误:长度(行)== 1 不正确

我认为这可能是因为许多分组因素不会一起发生而且永远不会发生。如何执行以下操作:

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 而不是gf,即a 中不应该有z

【问题讨论】:

  • 您可能需要在编辑中重新编写示例。当我查看c4 时,我在第 22、24、26、28 和 30 行看到“z”和“a”。
  • 感谢@rrs 现在更正它。
  • 我在编辑中运行了您的代码,没有“z”和“a”一起出现的行。还有什么问题吗?

标签: r plyr


【解决方案1】:

使用.drop = FALSE:

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

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2017-06-22
    • 2011-06-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多