我正在使用data.table
軟件包來完成一些分析。我正在採取的步驟之一涉及使用by =
函數來獲取彙總統計信息。但是,必須根據每個by
子集中的唯一結果計算聚合。我一直在使用unique
和密鑰來確保每個by
組由不同的記錄組成。隱約的東西像下面:在R的data.table中,如何將data.table的關鍵字保存到使用.SD引用的子集中?
dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var]
我注意到,在.SD
的關鍵似乎是基於對dt_old
按鍵和by =
語句來改變。顯然,這對我的結果子集是否是唯一的有影響。
我想得到一些清晰,所以我寫了下面。
library(data.table)
set.seed(1554)
dt_example <- data.table(id = 1:50,
site = sample(x = c("A","B","C"),
size = 50,
replace = TRUE,
prob = c(0.4,0.4,0.2)),
group = sample(x = c("Eta","Mu","Omicron","Psi"),
size = 50,
replace = TRUE),
team = sample(x = 1:3,
size = 50,
replace = TRUE,
prob = c(0.2,0.3,0.5)))
setkey(x = dt_example,
group,
team)
> dt_example[,as.list(key(.SD)),by = site]
site V1 V2
1: B group team
2: A group team
3: C group team
setkey(x = dt_example,
site,
group,
team)
> dt_example[,as.list(key(.SD)),by = site]
Empty data.table (0 rows) of 1 col: site
什麼我想明白是爲什麼,在第一個版本,爲.SD
,關鍵是一致的,而在第二個版本,.SD
沒有關鍵的。我認爲這與by =
列不直接包含在.SD
這一事實有關,這是打破關鍵,但我想確認我的邏輯。
所以,我的問題是這樣的:爲什麼數據表的子集.SD
沒有密鑰時,其中包含父數據表的密鑰的列之一用作by
分組變量?
這個問題實際上只是一個FR。 – eddi
@eddi什麼是FR? – TARehman
FR =功能請求 – Jaap