2016-02-11 106 views
0

我想計算一些統計數據並將結果作爲另一個data.table返回。我可以使用以下方法來做到這一點。有條件地添加data.table中的列

DT <- data.table::data.table(station = rep(1:1,52560), mod = rnorm(1*52560),obs = rnorm(1*52560)) # 1year , 1 station 

stat <- DT[,.(minObs  = min(obs), 
      minMod  = min(mod), 
      maxObs  = max(obs), 
      maxMod  = max(mod), 
      meanObs  = mean(obs)] 

但是,我的問題是,我想要有條件地添加這些統計。例如,只有在requestedStats的向量中存在meanObs時, 纔會添加列meanObs。原因是我正在計算相當多的統計數據,而且長度很大,我想給用戶選擇統計數據。我怎樣才能做到這一點?假設

requestedStats = c("maxObs","meanObs") 

只是按要求添加。我想避免計算所有的統計數據。只有要求的應該被退回。

+1

這是一個選項來計算所有統計數據,但只返回向量中的那些? –

+0

@newbie你應該編輯你的帖子以反映你對答案的提問。 – Frank

回答

3

爲了避免預先計算所有統計數據,您需要將每個可能命名的統計數據放入列表中。該列表必須被引用,以便R不會在需要之前對其進行評估。

my_exprs = quote(list(
    minObs  = min(obs), 
    minMod  = min(mod), 
    maxObs  = max(obs), 
    maxMod  = max(mod), 
    meanObs  = mean(obs) 
)) 

w = which(names(my_exprs) %in% requestedStats) 
DT[, eval(my_exprs[c(1,w)])] 
#  maxObs  meanObs 
# 1: 4.51951 0.0009352312 
+1

這是一個不錯的解決方案 –

+1

謝謝,這正是我需要的。 – newbie