如果我將變量bloodpressure
傳遞給data.table,一切正常。爲什麼data.table分組取決於我是否直接將變量名稱傳遞給它?
tdt <- data.table(bloodpressure = rnorm(1000, mean=100, sd=15), male=rep(c(0,1)))
strata.var <- with(tdt, get(c('male')))
tdt[,list(
varname='bloodpressure',
N=.N,
mean=mean(bloodpressure, na.rm=TRUE),
sd=sd(bloodpressure, na.rm=TRUE)
),
by=(strata.var)]
我得到這樣的結果
strata.var varname N mean sd
1: 0 bloodpressure 500 100.2821 15.13686
2: 1 bloodpressure 500 100.0392 15.02566
相匹配的組是指
> mean(tdt$bloodpressure[tdt$male==0])
[1] 100.2821
> mean(tdt$bloodpressure[tdt$male==1])
[1] 100.0392
但是,如果我想以編程方式做到這一點,變量保存在另一個變量(var
)
var_as_string <- 'bloodpressure'
var <- with(tdt, get(var_as_string))
tdt[,list(
varname='bloodpressure',
N=.N,
mean=mean(var, na.rm=TRUE),
sd=sd(bloodpressure, na.rm=TRUE)
),
by=(strata.var)]
我得到了不同的結果。
strata.var varname N mean sd
1: 0 bloodpressure 500 100.1606 15.13686
2: 1 bloodpressure 500 100.1606 15.02566
注意,現在mean
是相同的(即不按組在整個樣本來計算。
> mean(tdt$bloodpressure)
[1] 100.1606
@Arun我不認爲我理解範圍界定問題......我已將'bloodpressure'分配給'var',但這顯然是不正確的/不足的,data.table'只能看到' var'。我會做更多的閱讀...;) – drstevok 2014-10-10 15:07:58
我還不確定,但我想你可能在這裏發現了一個錯誤..測試。將回寫:-)。 – Arun 2014-10-10 15:18:58
是的,這是一個錯誤,正如我懷疑的那樣。提交[#875](https://github.com/Rdatatable/data.table/issues/875)。謝謝! – Arun 2014-10-10 15:53:02