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

如何在R语言中通过列名变量计算数据框指定范围的行和

问题分析与解决

你的代码存在两个核心错误:

  1. 数据框索引语法错误:Book1[c,(any_of(...))]中的c,是无效写法,行索引位置若要选择所有行,应留空或写TRUE。
  2. any_of()的误用:any_of()返回的是逻辑向量(标记列是否存在),无法与:结合生成连续的列位置范围,:需要的是数值类型的列索引。

以下是两种可行的解决方案:

方案1:Base R 实现

先通过列名找到对应的列位置,再用rowSums计算行和:

library(readxl)
library(dplyr)

Book1 <- read_excel("C:/X/X/X- X/X/Book1.xlsx",sheet = "Sheet4")

Last_Date <- tail(colnames(Book1),1)
First_Date <- head(colnames(Book1),3)[3]

# 获取起始和结束列的数值索引
start_idx <- which(colnames(Book1) == First_Date)
end_idx <- which(colnames(Book1) == Last_Date)

# 计算指定列范围的行和
Book1$Sum <- rowSums(Book1[, start_idx:end_idx])

方案2:dplyr 风格实现

利用dplyr的列选择函数all_of()配合select或c_across来实现:

方式A:结合select与rowSums

library(readxl)
library(dplyr)

Book1 <- read_excel("C:/X/X/X- X/X/Book1.xlsx",sheet = "Sheet4")

Last_Date <- tail(colnames(Book1),1)
First_Date <- head(colnames(Book1),3)[3]

Book1 <- Book1 %>%
  mutate(Sum = rowSums(select(., all_of(First_Date):all_of(Last_Date))))

方式B:结合rowwise与c_across

library(readxl)
library(dplyr)

Book1 <- read_excel("C:/X/X/X- X/X/Book1.xlsx",sheet = "Sheet4")

Last_Date <- tail(colnames(Book1),1)
First_Date <- head(colnames(Book1),3)[3]

Book1 <- Book1 %>%
  rowwise() %>%
  mutate(Sum = sum(c_across(all_of(First_Date):all_of(Last_Date)))) %>%
  ungroup()

注:all_of()用于确认列名存在并转换为列位置,适合已知列名一定存在的场景;若不确定列名是否存在,可替换为any_of(),但此时需确保起始和结束列都存在才能生成有效范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:37:55