代码之家  ›  专栏  ›  技术社区  ›  shy zhan

在data.table中添加一列,其中=vs:=[重复]

  •  0
  • shy zhan  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我试着用两种方法在data.table中添加一列,它返回了不同的结果。但我不明白为什么,你能给我个提示吗? 方式1:

    avg_tvd <- dev_survey4[Grp==0 | Grp==1, .(avgTVD = mean(TVDmASL, na.rm=TRUE)),
                           by = .(Grp,WELL,APA_Pair_ID)]
    

    结果如下:

    enter image description here

    方式2:

    avg_tvd <- dev_survey4[Grp==0 | Grp==1, avgTVD := mean(TVDmASL, na.rm=TRUE),
                           by = .(Grp,WELL,APA_Pair_ID)]
    

    结果如下:

    enter image description here

    方法1的结果就是我想要的。但是为什么方法2有不同的结果呢?它们之间有两个区别:

    1. 路2的柱子多于路1;
    2. 除0和1外,道路2的行还有GRP。
    1 回复  |  直到 7 年前
        1
  •  3
  •   Hugh    7 年前

    = 对于聚合/汇总,结果的行数与中唯一值的行数相同 by

    := 对于添加列,结果的行数与原始行数相同

    例如:

    library(data.table)
    dt <- data.table(I = 1:3, x = 11:13, y = c("A", "A", "B"))
    dt[, .(mx = mean(x)), by = "y"]
    #>    y   mx
    #> 1: A 11.5
    #> 2: B 13.0
    dt[, mx := mean(x), by = "y"][]
    #>    I  x y   mx
    #> 1: 1 11 A 11.5
    #> 2: 2 12 A 11.5
    #> 3: 3 13 B 13.0
    

    于2018-06-16由 reprex package (v0.2.0)。