汇总数据框时获取“未使用的参数”

时间:2019-09-18 02:01:23

标签: r

我对R中的编程一无所知,但是我们被要求运行一些总结数据帧的代码(数据表?不确定)。我在特定的行上引发了一个错误,而我的谷歌搜索对R语法的教给我的知识不足,我无法弄清楚。

我正在使用 RStudio v1.2.1335 逐步浏览R代码,R版本是 R x64 3.6.1

创建的数据框 dff 包含一堆列,并具有大约4年的各个节点的半小时数据。作为一个非常简化的演示,没有所有列,例如:

datetime        node   year   load, generation, deltaSS ...
1/1/2014 00:00, ABC,   2014,   100,  50,          300    ...
1/1/2014 00:00, XYZ,   2014,   200,  150,         500    ...
1/1/2014 00:30, ABC,   2014,   125,  70,          355    ...
1/1/2014 00:30, ABC,   2014,   220,  150,         25     ...
:
1/1/2015 00:00, ABC,   2015,   200,  20,          200    ...
1/1/2015 00:00, XYZ,   2015,   400,  450,         400    ...
:

我认为代码要尝试做的是针对特定分组汇总这些列的子集。有些列需要简单地求和,另一些列需要求和/ 2以转换成不同的单位。分组是按年份和按节点进行的。

换句话说,对于每个年份和每个节点,对表中某些列的值求和(或sum / 2)。像这样:

node   year   load, generation, deltaSS ...
ABC,   2014,   1000,  5000,     30000    ...
XYZ,   2014,   2000,  15000,    50000    ...
ABC,   2014,   1250,  7000,     35500    ...
ABC,   2014,   2200,  15000,    2500     ...
:
ABC,   2015,   2000,  2000,     20000    ...
XYZ,   2015,   4000,  45000,    40000    ...
:

我得到的错误是:

[.data.frame中的错误(dff,,。(generationMWh = sum(generation)/ 2,loadMWh = sum(load,:   未使用的参数(按=。((模型年份,节点))

奇怪的是,我们完全出错了,因为显然这段代码已经运行并且可以工作了(我只是在发现它是库版本之类的情况下才提到这一点)。

引发错误的代码是:

df <- dff[,.(generationMWh = sum(generation)/2, 
                 loadMWh = sum(load,na.rm = TRUE)/2,
                 deltaSS = sum(deltaSS,na.rm = TRUE), 
                 pos_deltaSS = sum(pos_deltaSS,na.rm = TRUE), 
                 neg_deltaSS = sum(neg_deltaSS,na.rm = TRUE), 
                 deltaCS = sum(deltaCS,na.rm = TRUE),
                 pos_deltaCS = sum(pos_deltaCS,na.rm = TRUE),
                 neg_deltaCS = sum(neg_deltaCS,na.rm = TRUE)
    ), by = .(modelyear,node)]

有人可以帮我吗?也许,如果问题还不是很明显的话,是否还有另一种编写R代码以分组汇总特定列的方法?

预先感谢 安迪C

编辑 随后我发现,如果在运行汇总代码之前将 data.frame 转换为 data.table ,则可以使此代码正常工作:

dff <- as.data.table(dff)

现在是否可以成功运行此代码,现在还是有疑问的,但至少我们可以继续前进。

1 个答案:

答案 0 :(得分:0)

您自己找到了解决方案,但是根据您的理解,让我解释此错误消息的含义。

您的错误提示是您尝试在data.table(基于R)上使用library(data.table)(来自data.frame)代码。尽管共享相似的属性,但这两个对象是不同的。值得注意的是,data.table提供了通过引用进行操作而不是复制庞大的数据结构的接口,因此很有可能会更快。

如您所知,您需要在data.table上运行代码,即必须将其转换到某个地方。