具有单个或多个value.vars的data.table :: dcast输出中的列名称不一致

时间:2018-01-10 16:02:20

标签: r 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的值,而不是来自d2a, b

这是一种可以理解的行为,但它与data.table(1,b)的重塑小插图中给出的示例相矛盾,并且在编程中使用dcast函数的情况下,可变数量为value.var这种行为是不可取的。

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

0 个答案:

没有答案