我有一个包含 3 列的 data.table 测试:Year、ID、Count(请参见下面的前 3 列)。我想添加第四列来汇总 ID 和年份,如下所示:
setkey(test, Year, ID)
test[, annualCount := sum(Count), by=list(Year, ID)]
我得到的东西看起来很奇怪:似乎函数 [ 自动将 1 添加到我的年度计数。例如,ID 210 和 Y1 应该给我 8 而不是 9。
它是 data.table 中的错误吗?
Year ID Count annualCount
1: Y1 210 1 9
2: Y1 210 1 9
3: Y1 210 0 9
4: Y1 210 1 9
5: Y1 210 1 9
6: Y1 210 1 9
7: Y1 210 1 9
8: Y1 210 1 9
9: Y1 210 1 9
10: Y1 3197 1 6
11: Y1 3197 1 6
12: Y1 3197 0 6
13: Y1 3197 1 6
14: Y1 3197 1 6
15: Y1 3197 1 6
更新:我使用的是 R 版本 2.15.0 (2012-03-30),但我安装了 data.table_1.8.6。当我安装这个包时,我收到一个警告,这个版本是在 2.15.1 上构建的。这是错误的原因吗?
更新 2:我安装了最新的 R(此时为 2.15.2),但没有帮助。使用相同的数据集,如果我打电话
test1 <- test[, list(annualCount = sum(Count)), by=list(Year, ID)]
然后我得到正确的结果。但如果我打电话
test2 <- test[, list(annualCount = sum(Count, na.remove = T)), by=list(Year, ID)]
然后 [ 自动将 1 添加到我的总和中。不幸的是,我无法从头开始复制带有此错误的数据集。
更新 3:dput(test) 输出。
structure(list(Year = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Y1", "Y2", "Y3"), class = "factor"),
ID = c(210, 210, 210, 210, 210, 210, 210, 210, 210,
3197, 3197, 3197, 3197, 3197, 3197),
Count = c(1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)),
.Names = c("Year","ID", "Count"), class = c("data.table", "data.frame"),
row.names = c(NA, -15L), .internal.selfref = <pointer: 0x7fb6dc000778>)
谢谢。