0

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

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

结果如下:

在此处输入图像描述

方式二:

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

以下是结果:

在此处输入图像描述

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

  1. 方式 2 的列多于方式 1;
  2. 方式 2 的行除了 0 和 1 之外还有 Grps。
4

1 回答 1

4

=对于聚合/汇总,结果的行数与唯一值的数量相同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

reprex 包(v0.2.0) 于 2018 年 6 月 16 日创建。

于 2018-06-16T04:52:48.347 回答