首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >integer64类的r data.table、sum()和by=.()

integer64类的r data.table、sum()和by=.()
EN

Stack Overflow用户
提问于 2018-10-29 17:50:11
回答 1查看 822关注 0票数 4

我刚刚注意到了这个问题,在data.table中有一篇专栏文章原来是属于integer64类的。我使用fread从互联网上的一个位置读取数据,不知道这个专栏被解释为integer64,这是一个我不熟悉的类。问题是当使用data.tableby时,该类在sum()中的行为如何。在这里的另外两个问题中,也有类似的引用,但这是在将其用作ID值的上下文中(Q1Q2)。

在此sum()列上按组执行integer64时,当列中有负值时,它的行为不像预期的那样(作为数值)。为什么会这样呢?是虫子吗?

代码语言:javascript
复制
library(data.table); library(bit64)

z <- data.table(
  group = c("A","A","A"),
  int64 = as.integer64(c(10,20,-10)),
  numeric = c(10,20,-10)
)

首先,如果没有by语句,它就可以正常工作:

代码语言:javascript
复制
z[, sum(int64)]  #20
z[, sum(int64, na.rm=T)] #20

和非data.table格式

代码语言:javascript
复制
sum(z$int64)
sum(z$int64, na.rm = TRUE)

但是当包含by语句时,它会变得可疑:

代码语言:javascript
复制
    z[, sum(int64, na.rm=FALSE), by=group] #only the negative value
    #group  V1
    #A     -10

    z[, sum(int64, na.rm=TRUE), by=group] #excluding the negative value
    #group  V1
    #A      30

    z[, sum(as.numeric(int64)), by=group] #expected answer
    #group  V1
    #A      20

这让我感到担忧,因为在表面水平上,没有理由相信z$int64中的数字有什么问题,我只注意到只有很少的行。

EN

回答 1

Stack Overflow用户

发布于 2022-07-02 10:33:22

这一点现在已经纠正了,请参阅https://github.com/Rdatatable/data.table/issues/1647

代码语言:javascript
复制
z[, sum(int64, na.rm=FALSE), by=group]
#    group    V1
#   <char> <i64>
#1:      A    20

z[, sum(int64, na.rm=TRUE), by=group]
#    group    V1
#   <char> <i64>
#1:      A    20

z[, sum(as.numeric(int64)), by=group]
#    group    V1
#   <char> <num>
#1:      A    20
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53051166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档