0

考虑以下 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

z正如预期的那样,值列的名称是 value.var 列和 中的值的组合: 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) 的 reshape 小插图中给出的示例相矛盾,并且在以dcast编程方式在具有可变数量的包内使用该函数的情况下,value.var这种行为是不希望的。

有没有办法改变这种行为?

4

0 回答 0