我想根據查找表k
在dt
中創建一個變量。根據我在k
中提取感興趣的變量,我得到了一些意想不到的結果。在查找表中使用.BY - 意外結果
dt <- data.table(x=c(1:10))
setkey(dt, x)
k <- data.table(x=c(1:5,10), b=c(letters[1:5], "d"))
setkey(k, x)
dt[,b:=k[.BY, list(b)],by=x]
dt #unexpected results
# x b
# 1: 1 1
# 2: 2 2
# 3: 3 3
# 4: 4 4
# 5: 5 5
# 6: 6 6
# 7: 7 7
# 8: 8 8
# 9: 9 9
# 10: 10 10
dt <- data.table(x=c(1:10))
setkey(x, x)
dt[,b:=k[.BY]$b,by=x]
dt #expected results
# x b
# 1: 1 a
# 2: 2 b
# 3: 3 c
# 4: 4 d
# 5: 5 e
# 6: 6 NA
# 7: 7 NA
# 8: 8 NA
# 9: 9 NA
# 10: 10 d
任何人都可以解釋爲什麼會發生這種情況嗎?
這創建了一個我的方法避免的全新數據表。此外,我特別感興趣的是爲什麼結果取決於我如何從'k'中提取'b' – Michael 2013-02-27 20:27:46
首先,'.BY'返回一個列表。所以,你必須訪問'k [.BY $ x,b]'。其實,你可以只用'k [x,b]'來訪問它。我正在弄清楚其他原因以及如何根據需要獲得解決方案。 – Arun 2013-02-27 20:35:47
'k [x,b]',我相信在每個組中有大量行的情況下效率不高。 – Michael 2013-02-27 20:39:34