我有一個data.table測試,包含3列:Year,ID,Count(請參見下面的前3列)。我想加入第四欄跨越ID和年度總結,像這樣:通過data.table()中的sum()引用賦值不正確的結果
setkey(test, Year, ID)
test[, annualCount := sum(Count), by=list(Year, ID)]
我有什麼看起來奇怪:它似乎功能[自動加1我annualCount。例如,與Y1的ID 210應該給我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:輸入(測試)輸出。
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>)
謝謝。
對我沒有任何問題,我得到8和5與您的數據! – agstudy
謝謝agstudy。我更新了我的問題。順便說一句,當我嘗試另一個模擬數據集時,我無法複製這個錯誤。我拉我的頭髮 – AdamNYC
也許你需要一杯咖啡! – agstudy