使用间接变量的 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
我仍然是 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