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

时间:2015-07-25 14:52:19

标签: 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[,.(mpg1=mean(mpg),disp1=mean(disp),mbyd=mpg1/disp1),by=cyl] 
Error in `[.data.table`(mtdt, , .(mpg1 = mean(mpg), disp1 = mean(disp),  : 
  object 'mpg1' not found

我一直认为可以引用之前的变量。可能是我在这里遗失了什么?

P.S。我不是在寻找其他软件包的解决方案。

1 个答案:

答案 0 :(得分:4)

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

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

或者,如果我们只关注三个变量的摘要以及'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
相关问题