【问题标题】:aggregate() Function in R with sumR中的聚合()函数与总和
【发布时间】:2025-12-14 03:25:01
【问题描述】:

我是 R 的初学者。我正在尝试用 R 脚本(在 Spotfire 中)编写代码来计算数据表中各列的总和。

如上所述,我的数据表列出了在给定日期记录的各种产品的产量,即不同油井的石油、天然气和水。我的目标是使用 R 中的 Aggregate 函数按日期汇总所有井的石油、天然气和水。

过去,我使用以下脚本取得了成功,该脚本采用特定日期所有井的每种产品的平均值。

NORMALIZED.PRODUCTS.=data.frame(aggregate(x[,c("OIL","GAS","WATER")],by=list(x[,"T"]),FUN=mean))

当我尝试将上面脚本中的函数更改为 Sum 函数时,出现错误。

NORMALIZED.PRODUCTS.=data.frame(aggregate(x[,c("OIL","GAS","WATER")],by=list(x[,"T"]),FUN=sum))

然后我在其他地方读到,也许我需要包含na.rm = TRUEna.action = NULL) 来帮助解决问题,但我仍然收到以下错误。

Could not execute function call.
TIBCO Enterprise Runtime for R returned an error: 'Error in aggregate.data.frame(x[, c("OIL","GAS", "WATER"  : no rows to aggregate
    eval(expr, envir, enclos)
    eval(expr, envir, enclos)
    data.frame(aggregate(x[, c("OIL","GAS", "WATER")],
    aggregate(x[, c("OIL","GAS", "WATER"],
    aggregate.data.frame(x[, c("OIL","GAS", "WATER")],
    stop("no rows to aggregate")'.
   at Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting()
   at Spotfire.Dxp.Data.DataFunctions.Executors.AbstractFunctionClient.<RunFunction>d__31.MoveNext()
   at Spotfire.Dxp.Data.DataFunctions.Executors.SPlusFunctionExecutor.<ExecuteFunction>d__12.MoveNext()
   at Spotfire.Dxp.Data.DataFunctions.DataFunctionExecutorService.<ExecuteFunction>d__3.MoveNext()


这是我的数据表

WELL                          T         OIL GAS WATER 
FILLMORE E4 24-25 3H LWS    10/11/2019  0   0   0
FILLMORE E4 24-25 3H LWS    10/12/2019  197 66  308
FILLMORE E4 24-25 3H LWS    10/13/2019  70  125 1095
FILLMORE E4 24-25 3H LWS    10/14/2019  79  1,211   881
FILLMORE E4 24-25 3H LWS    10/15/2019  0   0   0
FILLMORE E4 24-25 4H LWS    10/11/2019  0   0   0
FILLMORE E4 24-25 4H LWS    10/12/2019  276 90  374
FILLMORE E4 24-25 4H LWS    10/13/2019  47  93  1061
FILLMORE E4 24-25 4H LWS    10/14/2019  53  890 902
FILLMORE E4 24-25 4H LWS    10/15/2019  0   0   0
FILLMORE E4 25-24 1H LWS    10/11/2019  296 262 964
FILLMORE E4 25-24 1H LWS    10/12/2019  465 1,408   1343
FILLMORE E4 25-24 1H LWS    10/13/2019  -690    3,957   1267
FILLMORE E4 25-24 1H LWS    10/14/2019  81  2,093   1133
FILLMORE E4 25-24 1H LWS    10/15/2019  0   0   0

【问题讨论】:

  • 您遇到了什么错误?尝试在您的帖子中提供您实际数据的玩具样本,否则根据您的描述没有人可以帮助您。
  • 感谢您使用示例数据进行编辑。数据中的, 可能会导致问题。但是最重要的问题是你会收到什么错误信息?
  • 用于处理逗号,see this FAQ
  • 我能够在 spotfire 中加载 csv 并获得 sum 和 mean 函数以使用上面的代码。如果将数据加载到 R 中,数字列将转换为带有逗号的因子。 Spotfire 可以避免这种情况 - 如果您通过使用文件选项添加数据表加载数据。

标签: r sum aggregate


【解决方案1】:

我觉得为 Spotfire 编写解决方案很尴尬,但还是这样吧。

如果您将表命名为“x”,您只需将数据表传递到带有输入参数的数据函数,并按原样使用您的代码。 假设 5 列的列类型为 String、Date、Integer、Integer、Integer。

输出参数称为“NORMALIZED.PRODUCTS”。 您还需要运行该函数并按照提示正确返回数据表。

如果数据表未命名为'x',则包括:

x<-yourdatatablename NORMALIZED.PRODUCTS.=data.frame(aggregate(x[,c("OIL","GAS","WATER")],by=list(x[,"T"]),FUN=sum))

【讨论】: