我正在寻找尚未执行的(据我所知)任务的最佳替代方法,例如,在按组分列的数据表中,参照尚未执行的(据我所知)任务。
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
x y v
[1,] a 1 1
[2,] a 3 2
[3,] a 6 3
[4,] b 1 4
[5,] b 3 5
[6,] b 6 6
[7,] c 1 7
[8,] c 3 8
[9,] c 6 9
我想添加一个新的列z, 包括 f(y, v) 的 f(y, v), 以 x( lets take f(y, v) = mean(y)+v) 的值分组。 请注意, 我不想打印或存储此计算的结果, 如
DT[,mean(y)+v,by=x]
x V1
[1,] a 4.333333
[2,] a 5.333333
[3,] a 6.333333
[4,] b 7.333333
[5,] b 8.333333
[6,] b 9.333333
[7,] c 10.333333
[8,] c 11.333333
[9,] c 12.333333
但我更想把结果加到DT上:
x y v V1
[1,] a 1 1 4.333333
[2,] a 3 2 5.333333
[3,] a 6 3 6.333333
[4,] b 1 4 7.333333
[5,] b 3 5 8.333333
[6,] b 6 6 9.333333
[7,] c 1 7 10.333333
[8,] c 3 8 11.333333
[9,] c 6 9 12.333333
表格有262 MB MB, 因此
DT <- DT[,transform(.SD,mean(y)+v),by=x]
这不是一个选项,因为我无法在记忆中适应DT两次(我认为这是抄写操作所暗示的 ) 。 事实上,我从未见过这个操作完成。
我还有什么其他选择(直到数据。表格中含有DT[,z:= mean(y)+v,by=x])?
我刚读到关于DT[新DT]的报导,这里怎么了?
newDT <- DT[,mean(y)+v,by=x]
x V1
[1,] a 4.333333
[2,] a 5.333333
[3,] a 6.333333
[4,] b 7.333333
[5,] b 8.333333
[6,] b 9.333333
[7,] c 10.333333
[8,] c 11.333333
[9,] c 12.333333
(这是明智的)说:
> DT[newDT]
setkey(DT,x)
setkey(newDT,x)
x y v V1
a 1 1 4.333333
a 3 2 4.333333
a 6 3 4.333333
a 1 1 5.333333
a 3 2 5.333333
a 6 3 5.333333
a 1 1 6.333333
a 3 2 6.333333
a 6 3 6.333333
b 1 4 7.333333
b 3 5 7.333333
b 6 6 7.333333
b 1 4 8.333333
b 3 5 8.333333
b 6 6 8.333333
b 1 4 9.333333
b 3 5 9.333333
b 6 6 9.333333
c 1 7 10.333333
c 3 8 10.333333
c 6 9 10.333333
c 1 7 11.333333
c 3 8 11.333333
c 6 9 11.333333
c 1 7 12.333333
c 3 8 12.333333
c 6 9 12.333333
但这不是我想要的,这是什么错?