如何用变量替代数据表月份列名引用执行sum求和运算?
解决方案:用变量替代硬编码的月份列名
当然可行!问题出在你用了$来引用列——这个符号只能直接写死列名字面量,没法用变量。换成[[ ]]就能轻松解决这个问题,这是R里用变量引用数据框列的标准做法。
具体操作步骤:
- 首先定义你的月份变量:
searchMonth <- "Mar 2018" - 修改计算代码,把
Table1$Mar 2018``替换为Table1[[searchMonth]],同时可以简化掉which()(逻辑向量直接就能用来索引,无需多套一层which()):report[1,2] <- sum(Table1[[searchMonth]][Table1$Product == "Apples"])
额外扩展:批量处理多个月份
如果后续你需要批量计算多个月份的数据,这个方法会非常方便。比如遍历一个月份列表:
# 定义要处理的月份列表 monthList <- c("Jan 2018", "Feb 2018", "Mar 2018") # 循环计算每个月份的苹果总和并写入report for (i in seq_along(monthList)) { currentMonth <- monthList[i] report[i, 2] <- sum(Table1[[currentMonth]][Table1$Product == "Apples"]) }
原理说明
$是R里的语法糖,只能识别直接写在代码里的列名字面量,不支持变量替换;而[[ ]]运算符支持传入字符串变量来动态引用列,这正是你需要的功能。
内容的提问来源于stack exchange,提问作者dmel2017
相关产品推荐
相关产品推荐

