首页 > 解决方案 > 在 data.table 中求和返回 R 3 vs 4 中的不同值

问题描述

在 R 4.0.2 中使用 data.table 时,我遇到了一个奇怪的求和问题。当我按一列对数据进行分组并对另一列(bar[,.(C = sum(B)), by = A]行)求和时,我得到了一些不正确的数字。这是一个我只加载data.table的reprex:

> library(data.table)
> bar <- data.table(data.frame("A" = as.character(c(1,2,3,2,3,2)), "B" = as.numeric(c(1,2,3,4,5,6))))
> bar
   A B
1: 1 1
2: 2 2
3: 3 3
4: 2 4
5: 3 5
6: 2 6
> bar[,.(C = sum(B)), by = A]
   A  C
1: 1  2
2: 2 10
3: 3  8
> bar[A == 1, sum(B)]
[1] 1
> bar[A == 2, sum(B)]
[1] 12
> bar[A == 3, sum(B)]
[1] 8
> bar[,.(C = sum(as.integer(B))), by = A]
   A  C
1: 1  1
2: 2 12
3: 3  8

然而,如果我在 R 3.6.3 上执行此操作,一切都会按我的预期进行,并且上面有问题的部分现在看起来像:

> bar[,.(C = sum(B)), by = A]
   A  C
1: 1  1
2: 2 12
3: 3  8

其他一切都是一样的。

R 4.* 是否改变了一些数字求和的方法?为什么我先转换为整数时它是固定的?

标签: rdata.table

解决方案


推荐阅读