当我们使用reshape2::dcast而不是data.table::dcast因为reshape2::dcast不支持多个时会发生错误value.var。
?reshape2::dcast给出的文档
value.var - 存储值的列的名称,请参阅guess_value 了解默认策略以解决此问题。
而在?data.table::dcast里面
value.var - 将填充其值以进行强制转换的列的名称。如果没有提供,函数guess() 会尝试自动猜测该列。通过将它们的名称作为字符向量传递来同时转换多个 value.var 列。请参阅示例。
有一个可重复的小例子
data(mtcars)
dcast(mtcars, vs + am ~ carb, fun.aggregate = sum, value.var = c('mpg', 'disp'))
.subset2(x, i, exact = exact) 中的错误:下标超出范围另外:警告消息:1:在 dcast(mtcars, vs + am ~ carb, fun.aggregate = sum, value.var = c(" mpg",
如果我们转换为data.table
library(data.table)
dcast(as.data.table(mtcars), vs + am ~ carb, fun.aggregate = sum, value.var = c('mpg', 'disp'))
# vs am mpg_1 mpg_2 mpg_3 mpg_4 mpg_6 mpg_8 disp_1 disp_2 disp_3 disp_4 disp_6 disp_8
#1: 0 0 0.0 68.6 48.9 63.1 0.0 0 0.0 1382.0 827.4 2082.0 0 0
#2: 0 1 0.0 26.0 0.0 57.8 19.7 15 0.0 120.3 0.0 671.0 145 301
#3: 1 0 61.0 47.2 0.0 37.0 0.0 0 603.1 287.5 0.0 335.2 0 0
#4: 1 1 116.4 82.2 0.0 0.0 0.0 0 336.8 291.8 0.0 0.0 0 0
在 OP 的代码中,它将是
summary_out <- dcast(setDT(DB1),
REGION_ID + REGION_NAME ~ STATUS,
fun.aggregate = sum,
value.var = c("SALES","PROFIT"))