通过R中的聚集函数循环



我试图在汇总函数中用于循环,我无法通过循环进行汇总函数分配 X1X2X3。我创建了一个虚拟的示例,并且我的代码也

 year = cbind(rep(2000, 12), rep(2001, 12), rep(2002, 12))
 year = as.vector(as.matrix(year))
 month = cbind(seq(1:12), seq(1:12), seq(1:12))
 month = as.vector(as.matrix(month))
 X1 = rnorm(36, mean = 0, sd = 1)
 X2 = rnorm(36, mean = 2, sd = 1)
 X3 = rnorm(36, mean = 0, sd = 1)
 DF = data.frame(cbind(year, month, X1, X2, X3))
 for (i in 1:3) {
     bb_month = aggregate(as.symbol(sprintf('X%1.0f', i)) ~ month + year, DF , sum)
 }

如果我正确理解的话,这应该可以解决:

year <- rep(c(2000:2002), each = 12)
month <- rep(1:12, 3)
days <- rep("it's a day!", length(year)) #dummy var
X1 <- rnorm(36,  mean = 0,  sd = 1)
X2 <- rnorm(36,  mean = 2,  sd = 1)
X3 <- rnorm(36,  mean = 0,  sd = 1)
DF <- data.frame(year, month, days, X1, X2, X3)
aggregate(formula = . ~ year + month,
          data = DF[, names(DF) != "days"],
          FUN = sum)

编辑:如果您对X1-X3进行了类似的计算,则除循环外,可能还有更好的方法。但是,如果您坚持通过循环进行操作:

for (i in 1:3) {
  fml <- as.formula(sprintf('X%i ~ month + year', i))
  bb_month <- aggregate(formula = fml,
                        data = DF, FUN = sum)
  ###Loop continues###
}

最新更新