我在R中有一个大的data.table对象,有4,847,143行。速度是关键,因此我主要使用库(data.table)实现操作。
dt的结构如下:
library(data.table)
dt
nr group count
1: 1 A 2
2: 1 B 2
3: 2 C 2
4: 2 D 2
5: 2 A 2
6: 3 B 2
当我尝试使用dcast将这个长dt转换为宽格式时,我收到以下错误:
ndt <- dcast(dt, nr ~ group, fun.aggregate = sum, value.var = 'count')
Error in dim.data.table(x) :
long vectors not supported yet: ../../src/include/Rinlinedfuns.h:138
In addition: Warning message:
In setattr(l, "row.names", .set_row_names(length(l[[1L]]))) :
NAs introduced by coercion to integer range
当我将相同的函数应用于前2,000,000行的子集时,它可以正常工作:
ndt <- dcast(dt[1:2000000], nr ~ group, fun.aggregate = sum, value.var = 'count')
dim(dt)
[1] 4847143 3
dim(ndt)
[1] 1166035 716
在解决此问题或替代快速解决方案时,将非常感谢任何帮助。
我的data.table版本:
> packageVersion('data.table')
[1] ‘1.10.4.3’
由于