Ошибка возникает, когда мы используем reshape2::dcast
вместо data.table::dcast
, поскольку reshape2::dcast
не поддерживает более одного value.var
.
Документация для ?reshape2::dcast
дает
value.var - имя столбца, в котором хранятся значения, см. Стратегию по умолчанию для определения этого.
в то время как в ?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, точный = точный): индекс за пределами границ Кроме того: Предупреждающие сообщения: 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
В коде ОП это будет
summary_out <- dcast(setDT(DB1),
REGION_ID + REGION_NAME ~ STATUS,
fun.aggregate = sum,
value.var = c("SALES","PROFIT"))