我只想让一个函数对数据中的行求和.使用by
参数覆盖旧值.通常情况下,我希望在所有行中得到by
个相同的结果.我创建了两个示例.第一个和第二个的唯一区别是删除了take列数据中的前3位.桌子第一个示例按预期工作,第二个示例显示了一些意外行为.我很乐意得到任何关于我做错了什么的暗示.
R版本:4.0.4
数据表版本:1.14.2
library(data.table)
# my expected function
superpose <- function(DT){
DT <- copy(DT)
DT[, value := sum(value), by = take]
}
v1a = c( 55: 59, 33: 37, 54: 56, 32: 34, 58: 60, 36: 38)
v1b = c(25555:25559, 20533:20537, 25554:25556, 20532:20534, 25558:25560, 20536:20538)
all.equal(as.integer(factor(v1a)), as.integer(factor(v1b)))
# [1] TRUE
v2 = 1:22
data1 <- data.table(take = v1a, value = v2) # 1st data - expected behavior
data2 <- data.table(take = v1b, value = v2) # 2nd data - unexpected behavior
res1 <- superpose(data1)
res2 <- superpose(data2)
cbind(res1, res2)
which(res1[, value] != res2[, value])
# [1] 8 11 15 16 19 20 21 22