Несоответствие имен столбцов в выходных данных data.table::dcast с одним или несколькими значениями.
Рассмотрим следующий пример data.table:
dt = data.table(x=sample(5,20,TRUE), y=sample(2,20,TRUE),
z=sample(letters[1:2], 20,TRUE), d1 = runif(20), d2=1L)
если мы бежим dcast
как показано на странице справки:
dcast(dt, x + y ~ z, fun=sum, value.var=c("d1","d2"))
# x y d1_a d1_b d2_a d2_b
#1: 1 1 2.6886652 0.8004916 5 1
#2: 1 2 1.1418996 0.0000000 3 0
#3: 2 1 0.2478359 0.0000000 1 0
#4: 2 2 0.0000000 0.2365897 0 1
#5: 3 2 0.0000000 0.5043686 0 2
#6: 4 1 0.5171290 1.7869604 1 2
#7: 5 1 0.8341936 1.2321818 1 2
#8: 5 2 0.6700292 0.0000000 1 0
Где имя столбцов значения является комбинацией столбцов value.var и значения в z
, как и ожидалось: d1_a, d1_b, d2_a, d2_b
,
Но если мы запустим один и тот же код только с одним столбцом в value.var:
dcast(dt, x + y ~ z, fun=sum, value.var=c("d2"))
# x y a b
#1: 1 1 5 1
#2: 1 2 3 0
#3: 2 1 1 0
#4: 2 2 0 1
#5: 3 2 0 2
#6: 4 1 1 2
#7: 5 1 1 2
#8: 5 2 1 0
Имя столбцов нового значения происходит только от значения z
а не из d2
: a, b
,
Это понятное поведение, но оно противоречит примеру, приведенному в перерисовке виньетки data.table (1, b) и в случае использования dcast
функционировать программно внутри пакета с переменным числом value.var
такое поведение не желательно.
Есть ли способ изменить это поведение?