R 引用data.table中同一链中的前一个变量

R 引用data.table中同一链中的前一个变量,r,data.table,R,Data.table,在下面的示例中,如何引用同一个链中的变量,但要在前面计算: library(data.table) mtdt<-as.data.table(mtcars) mtdt[,.(mpg1=mean(mpg),disp1=mean(disp)),by=cyl][,`:=`(mbyd=mpg1/disp1)] # this works 我一直认为可以引用前面的变量。也许我错过了什么 另外,我并没有从其他软件包中寻找解决方案 如果我们需要在现有数据集中创建三个新变量 mtdt[, c('mpg1',

在下面的示例中,如何引用同一个链中的变量,但要在前面计算:

library(data.table)
mtdt<-as.data.table(mtcars)
mtdt[,.(mpg1=mean(mpg),disp1=mean(disp)),by=cyl][,`:=`(mbyd=mpg1/disp1)] # this works
我一直认为可以引用前面的变量。也许我错过了什么


另外,我并没有从其他软件包中寻找解决方案

如果我们需要在现有数据集中创建三个新变量

mtdt[, c('mpg1', 'disp1', 'mybd') := {tmp1 <- mean(mpg)
                                      tmp2 <- mean(disp)
                                     list(tmp1, tmp2, tmp1/tmp2)}, by = cyl]

mtdt[,c('mpg1','disp1','mybd'):={tmp1谢谢。我实际上希望我的第二个解决方案能起作用。但是,我想这是不可能的。@user227710你必须把它放在大括号内,然后使用
list
@akrun:我会按照你的方法来做。谢谢。
mtdt[, c('mpg1', 'disp1', 'mybd') := {tmp1 <- mean(mpg)
                                      tmp2 <- mean(disp)
                                     list(tmp1, tmp2, tmp1/tmp2)}, by = cyl]
mtdt[, {tmp1 <- mean(mpg)
        tmp2 <- mean(disp)
        list(mpg1 = tmp1, disp1 = tmp2, mybd = tmp1/tmp2)}, by = cyl]
#   cyl     mpg1    disp1       mybd
#1:   6 19.74286 183.3143 0.10769950
#2:   4 26.66364 105.1364 0.25361003
#3:   8 15.10000 353.1000 0.04276409