You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R Studio中如何用循环提取数据框指定列计算每日销售总和

错误原因分析
  • 第一种写法错误点:$运算符优先级高于函数调用,R会优先识别SalesData$get为提取数据框中名为get的列,后续接括号相当于尝试对列对象执行函数调用,因此抛出「attempt to apply non-function」报错。
  • 第二种写法错误点:$运算符不支持直接解析动态生成的字符串列名,会把colnames(SalesData)[i]整体作为固定列名去数据框中匹配,自然找不到对应列。
正确循环实现

R中动态提取数据框列需要用双中括号[[运算符,支持传入字符串格式的列名,正确循环写法如下:

# 先初始化新列,避免循环过程中动态扩容降低效率
SalesData$Dailysum <- NA_real_
for (i in 1:50) {
  # 提取对应日期列,求和后赋值,na.rm=TRUE可避免缺失值导致结果为NA
  SalesData$Dailysum[i] <- sum(SalesData[[colnames(SalesData)[i]]], na.rm = TRUE)
}

如果确认数据框前50列就是Day1到Day50的销售列,也可以直接按列索引提取,写法更简单:

SalesData$Dailysum <- NA_real_
for (i in 1:50) {
  SalesData$Dailysum[i] <- sum(SalesData[, i], na.rm = TRUE)
}
更高效的向量化实现

其实不需要写循环,用R内置的colSums函数一行就能完成计算,执行效率远高于显式循环:

# 直接对前50列按列求和
SalesData$Dailysum <- colSums(SalesData[, 1:50], na.rm = TRUE)

如果担心列顺序变动导致计算错误,也可以通过列名规则匹配目标销售列:

# 匹配所有名称为Day+数字格式的列
target_cols <- grep("^Day\\d+$", colnames(SalesData), value = TRUE)
SalesData$Dailysum <- colSums(SalesData[, target_cols], na.rm = TRUE)

内容的提问来源于stack exchange,提问作者Eliyah Jung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 11:57:02