考虑以下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
这种行为是不可取的。
有没有办法改变这种行为?