r data.table,sum()和by =。()中的integer64类

时间:2018-10-29 17:50:11

标签: r data.table

我刚刚注意到一个问题,data.table中的一列原来是integer64类的。我正在使用fread从Internet上的某个位置读取数据,但不知道所讨论的列被解释为integer64,这是我不熟悉的类。问题是使用data.tablesum()时此类在by中的行为。在此处的其他两个问题中也类似地引用了该变量,但这是在将其用作ID值(Q1Q2)的情况下

在此integer64列上按组执行sum()时,当列中存在负值时,它的行为不符合预期(作为数字)。为什么是这样?是一个错误吗?

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语句即可正常工作:

z[, sum(int64)]  #20
z[, sum(int64, na.rm=T)] #20

并且采用非data.table格式

sum(z$int64)
sum(z$int64, na.rm = TRUE)

但是当包含by语句时,它会变得混乱:

    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中的数字有什么问题,我只是注意到行数很少。

0 个答案:

没有答案