【问题标题】:rowSums using an indirect variable (i.e. using a string variable to allocate the column numbers)rowSums 使用间接变量(即使用字符串变量分配列号)
【发布时间】:2015-02-16 04:46:11
【问题描述】:

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

所以我创建了一个值列表来包含列范围,例如Q1

这就是我想要实现的目标,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' 

任何建议将不胜感激!谢谢。

【问题讨论】:

    标签: r string variables dataframe


    【解决方案1】:

    在没有可重复数据的情况下,这里有一个示例,希望您可以适应您的具体情况:

    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
    

    【讨论】:

    • 谢谢 thelatemail,我确实尝试创建可重现的数据,但示例数据只创建了与我面临的实际问题无关的错误消息。菜鸟失误! :) 非常感谢!
    • 我对您的解决方案所做的小修正是在 rowSums 中,因为它应该是 sval - 但是您的技巧已经完成了工作!谢谢!
    • @jacatra - 很好发现,现在已修复。
    猜你喜欢
    • 2015-11-06
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2011-01-20
    • 2016-03-24
    • 2019-02-20
    • 2016-10-04
    相关资源
    最近更新 更多