2

我正在使用以下dcast功能:

summary <- dcast(DB1, 
                 REGION_ID + REGION_NAME ~ STATUS,
                 fun.aggregate = sum, 
                 value.var = "SALES")

我正在尝试使用 value.var 中的两个变量,但出现错误。下面是语法:

summary <- dcast(DB1, 
                 REGION_ID + REGION_NAME ~ STATUS,
                 fun.aggregate = sum, 
                 value.var = c("SALES","PROFIT"))
4

1 回答 1

0

当我们使用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"))
于 2020-04-10T02:29:18.570 回答