【发布时间】:2017-02-05 02:47:50
【问题描述】:
我正在编写一个 Web 界面来对大型数据集进行统计。小部件将允许用户选择变量和组。每个变量都与一种可以执行的统计相关联。该网页调用一个 R 脚本,该脚本设置适当的数据框以传递给“聚合”,然后传递给各种输出。这里的数据不相关,所以我没有包含它。
我的问题是“聚合”的灵活输入因为我无法弄清楚的原因而爆炸:
group variable “grp”
str(grp)
'data.frame': 1573 obs. of 1 variable:
$ Loc: Factor w/ 4 levels "ED","ICU","Trans",..: 1 1 1 1 1 1 1 1 1 4 ...
Time variable
TimeBase <- “year”
data
str(tmp)
'data.frame': 554 obs. of 4 variables:
$ Loc : Factor w/ 4 levels "ED","ICU","Trans",..: 4 1 1 1 4 4 1 1 4 4 ...
$ year : Factor w/ 7 levels "2011","2012",..: 1 1 1 1 1 1 1 1 1 1 ...
$ ActivLag: num 3 -2 0 1 17 210 19 -7 0 107 ...
$ ScanLag : num 80 12 5 8 159 255 28 109 11 111 ...
aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, paste0(stvar), na.rm = TRUE, na.action = na.pass)
如果 stvar = “mean”,这可以正常工作,但如果 stvar = “sum”,它不接受 na.rm 作为参数,它就不起作用。所以,我尝试了以下方法:
statstrg <- ifelse(stvar %in% c("sum", "prop","frel", "median"), " na.action = na.pass", " na.rm = TRUE, na.action = na.pass")
aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, paste0(stvar), paste0(statstrg))
这不起作用并给出以下错误:
Error in if (na.rm) x <- x[!is.na(x)] else if (any(is.na(x))) return(x[FALSE][NA]) :
argument is not interpretable as logical
虽然
aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, paste0(stvar), na.action = na.pass)
是否适用于 stvar = “sum”。
对 na.rm 和 na.action = na.pass 分别使用条件字符串赋值和 paste(var) 不起作用,因为无法处理聚合解析参数所需的逗号。我尝试在 paste() 中传递各种参数组合,但聚合希望看到单个参数。那么任何人都可以指出一种可能会更好的方法吗?谢谢。
【问题讨论】:
-
函数
sum()也接受这个na.rm=T/F参数bdw
标签: r conditional aggregate paste