有条件地添加data.table中的列
问题描述:
我想计算一些统计数据并将结果作为另一个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")
只是按要求添加。我想避免计算所有的统计数据。只有要求的应该被退回。
答
为了避免预先计算所有统计数据,您需要将每个可能命名的统计数据放入列表中。该列表必须被引用,以便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
这是一个选项来计算所有统计数据,但只返回向量中的那些? –
@newbie你应该编辑你的帖子以反映你对答案的提问。 – Frank