我对R中的编程一无所知/zip/nada,但是我们被要求运行一些代码来总结数据框架(数据表?不确定行话)。我在一条特定的行上被抛出一个错误,我的googling没有教我足够的关于R语法的知识,让我找出它。
我正在使用RStudio v1.2.1335完成R代码,R版本是R x64 3.6.1
一个dataframe是创建的,它包含了一组列,并且有大约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(生成)/2,loadMWh = sum(load,:未使用的参数) (by =.(模型年,节点))**
奇怪的是,我们得到了一个错误,因为很明显,这段代码已经运行并工作了(我只提到这一点,以防它是库版本或其他什么的)。
引发错误的代码是:
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)
这段代码以前是否成功运行现在还存在疑问,但至少我们可以向前迈进。
发布于 2019-09-19 06:42:34
您自己找到了解决方案,但是为了您的理解,让我解释一下这个错误消息意味着什么。
您的错误是试图在data.table
(基本R)上使用data.frame
(来自library(data.table)
)代码。尽管共享类似的属性,但这两个对象是不同的。值得注意的是,data.table
提供了一个通过引用来执行操作的接口,而不是复制庞大的数据结构,因此它很可能更快。
正如您所理解的,您需要在一个data.table
上运行您的代码,也就是说,您必须在某个地方转换它。
https://stackoverflow.com/questions/57984051
复制相似问题