使用间接变量的 rowSums(即使用字符串变量分配列号)

rowSums using an indirect variable (i.e. using a string variable to allocate the column numbers)

我仍然是 R 的新手,但很享受到目前为止的旅程。我试图将每周的专栏分组到季度中,并尝试创建一个更优雅的解决方案,而不是创建单独的行来分配值。

所以我创建了一个值列表来包含列范围,例如Q1 <- 5:9、Q2 <- 10:22,依此类推。阅读原始数据框后,我想创建一个以 Q1 作为变量的新数据框,其中包含第 5-9 列的总计,Q2 的总计 10:22,等等。问题是,rowSums 没有'像我一样用一个变量来表示实际范围。

这就是我想要实现的目标,sval 包含原始每周数据,qsval 包含季度总计:

Q110 <- 5:9
Q210 <- 10:22
Q310 <- 23:35
Q410 <- 36:48

Q111 <- 49:61
Q211 <- 62:74
Q311 <- 75:87
Q411 <- 88:100

qsval <- sval[,c(1:4)]   # Copying the first four columns from the weekly data
period <- c('Q110','Q210','Q310','Q410','Q111','Q211','Q311','Q411')

for (i in 1:8) {
    assign(qsval$period[i], rowSums(sval,na.rm=F, get(period[i])))
}

这可能吗?给出的错误信息是:

Error in rowSums(sval, na.rm = F, get(period[i])) : invalid 'dims' 

如有任何建议,我们将不胜感激!谢谢。

在没有可重现数据的情况下,这里有一个示例,希望您可以根据自己的具体情况进行调整:

set.seed(1) # just to make the random data reproducible
sval <- data.frame(replicate(6,sample(1:3)))

#  X1 X2 X3 X4 X5 X6
#1  1  3  3  1  3  2
#2  3  1  2  3  1  3
#3  2  2  1  2  2  1

Qlist <- list(Q1=1:3,Q2=4:6)
qsval <- data.frame(lapply(Qlist, function(x) rowSums(sval[x]) ))

#  Q1 Q2
#1  7  6
#2  6  7
#3  5  5