【问题标题】:R aggregate error: "replacement has <foo> rows, data has <bar>"R 聚合错误:“替换有 <foo> 行,数据有 <bar>”
【发布时间】:2015-01-22 07:08:42
【问题描述】:

我正在尝试聚合一个数据框,但遇到了一个我不明白的错误。我有一个名为 M15 的数据框,它包含 33 个变量的 200k+ 条记录。我无法使用可以与社区共享的数据来重现此错误。

M15<-M15backup[c(600:700),]

# setting the fields to roll up
aggField<-c('Location','EEStatus')

# group by rest of fields
byField<-setdiff(x=colnames(M15),y=aggField)

# example uses built in function, my production code uses a custom
M15.2<-aggregate(x=M15[aggField],
             by=M15[byField],
             FUN=length
             )

如果我在第一行调整 600:700,我可以让脚本在数据帧的小块上运行,但如果我为整个数据帧运行,我会收到以下形式的错误:

Error in `[[<-.data.frame`(`*tmp*`, len + i, value = c("All Locations",  : 
  replacement has 341 rows, data has 394

有人可以解释这个错误的含义和/或建议处理它的方法吗?

【问题讨论】:

  • x 中的 aggregate 变量不能有两列。您需要将它们组合成一个向量。 aggregate 对于这么多行也会非常慢。使用 data.table 或 SQL 数据库。
  • 我的实际经验不同意你的说法:“如果我在第一行调整 600:700,我可以让脚本在数据框的小块上运行”
  • 此外,如果我删除我要聚合的变量之一并针对相同的观察子集运行,我仍然会得到相同的错误。

标签: r


【解决方案1】:

根据this bug report,这显然是 R 版本 3.0.3 之前的错误。我遇到了同样的问题,将 R 升级到 3.1.2 版后问题就消失了。

【讨论】:

    猜你喜欢
    • 2018-05-15
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2017-06-23
    相关资源
    最近更新 更多