年、ID、カウントの 3 つの列を持つ data.table テストがあります (以下の最初の 3 つの列を参照)。次のように、ID と年をまとめて 4 番目の列を追加したいと思います。
setkey(test, Year, ID)
test[, annualCount := sum(Count), by=list(Year, ID)]
私が得たものは奇妙に見えます: 関数 [ は自動的に私のannualCount. たとえば、ID 210 に Y1 を指定すると、9 ではなく 8 が返されます。
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>)
ありがとう。