有条件地在data.table中添加列

时间:2016-02-11 20:55:55

标签: r 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 :(得分: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