我对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)
现在是否可以成功运行此代码,现在还是有疑问的,但至少我们可以继续前进。
答案 0 :(得分:0)
您自己找到了解决方案,但是根据您的理解,让我解释此错误消息的含义。
您的错误提示是您尝试在data.table
(基于R)上使用library(data.table)
(来自data.frame
)代码。尽管共享相似的属性,但这两个对象是不同的。值得注意的是,data.table
提供了通过引用进行操作而不是复制庞大的数据结构的接口,因此很有可能会更快。
如您所知,您需要在data.table
上运行代码,即必须将其转换到某个地方。