【问题标题】:error message in r: no rows to aggregate [closed]r中的错误消息:没有要聚合的行[关闭]
【发布时间】:2014-05-20 10:08:29
【问题描述】:

我正在运行一个用 r 语言编写的程序,该程序旨在将许多 csv 数据文件编译成一个 csv 文件,然后生成一个输出文件,其中包含对组合文件中选择的几个变量的简单计算的输出。后面的过程是通过使用组合文件作为输入、选择变量并指定我需要的值类型来完成的。除了这个解释之外,每天都会获得数据文件,这些文件通过 r 程序获得一些分析,例如选定时间间隔内的数据的最小值、最大值、平均值或总和。

继续我在这个程序中遇到的问题,该程序通常能够生成组合的 csv 文件而没有太大问题,但是当涉及到生成输出文件的部分时,该程序有时会产生聚合错误消息:

aggregate.date.frame 中的错误(mf[1L],mf[-1L],FUN = FUN,...): 没有要聚合的行

此错误消息仅针对某些组合数据文件出现,这让我更加困惑,因为导致此类问题的组合 csv 文件中的数据与不导致此问题的组合文件没有任何区别。但是,目前我仍然怀疑组合数据 csv 文件而不是程序应该有问题,因为该程序通常适用于许多分析案例。

基本上,程序使用聚合函数来计算输出文件。

我对使用 r 很陌生,我正在使用的程序由几个阶段组成,所以如果我的解释不清楚,我深表歉意。

至少,我想知道这种聚合错误的可能原因是什么。提前谢谢你。

【问题讨论】:

  • 我假设您的意思是aggregate.data.frame 而不是aggregate.date.frame
  • 如果您的某一列无法聚合,您也可能会收到此错误。例如,如果您的函数是“sum”,但您的列之一是逻辑或字符。

标签: r csv error-handling


【解决方案1】:

出现此错误是因为传递给聚合的对象(与 x 匹配的对象)的行数为零。

下面给出函数的前 10 行:

> head(aggregate.data.frame, 10)

1  function (x, by, FUN, ..., simplify = TRUE)                               
2  {                                                                         
3      if (!is.data.frame(x))                                                
4          x <- as.data.frame(x)                                             
5      FUN <- match.fun(FUN)                                                 
6      if (NROW(x) == 0L)                                                    
7          stop("no rows to aggregate")                                      
8      if (NCOL(x) == 0L) {                                                  
9          x <- data.frame(x = rep(1, NROW(x)))                              
10         return(aggregate.data.frame(x, by, function(x) 0L)[seq_along(by)])

所以在调用aggregate 之前,请在对象上调用NROW,它会告诉你它是否为零。这可能由于几个原因而发生,但如果没有可重复的示例,很难知道。一个原因可能是x 匹配到了错误的参数。但如果它对某些 csv 文件运行良好,那么情况可能并非如此。更有可能该对象确实有 0 行,可能是因为子集。

【讨论】:

    【解决方案2】:

    只需键入函数名称aggregate.data.frame 即可查看aggregate.data.frame() 的源代码,如果NROW(x) 为零,您将看到此错误。如果mf[1] 没有维度且长度为零,或者其第一个维度为零,则会发生这种情况。

    如果没有更多上下文,就不可能说出这是如何发生的,但请查看Hadley Wickham's online book 以获取有关进一步调试的一些想法。

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      相关资源
      最近更新 更多