我刚刚注意到了这个问题,在data.table中有一篇专栏文章原来是属于integer64类的。我使用fread从互联网上的一个位置读取数据,不知道这个专栏被解释为integer64,这是一个我不熟悉的类。问题是当使用data.table和by时,该类在sum()中的行为如何。在这里的另外两个问题中,也有类似的引用,但这是在将其用作ID值的上下文中(Q1和Q2)。
在此sum()列上按组执行integer64时,当列中有负值时,它的行为不像预期的那样(作为数值)。为什么会这样呢?是虫子吗?
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中的数字有什么问题,我只注意到只有很少的行。
发布于 2022-07-02 10:33:22
这一点现在已经纠正了,请参阅https://github.com/Rdatatable/data.table/issues/1647
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 20https://stackoverflow.com/questions/53051166
复制相似问题