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

如何调整R语言dplyr中select函数的列选择逻辑解决报错

错误原因

运行删除全0数值列的代码后,原数据集中DR09、DR010、DR012三列因全为0被移除,当前数据框已不存在DR012列,第三段代码用D1:DR012指定列范围时无法找到终止列,因此触发报错。

解决方案

无需硬写终止列的列名,用dplyr内置的动态列选择语法即可适配删列后的结构,两种常用写法可选:

  • D1:last_col():自动选取从D1列开始到当前数据框最后一列的所有列
  • starts_with("D"):自动选取所有列名以D开头的列,列顺序调整也不会影响选择结果
修正后完整代码
library(dplyr)

df1 <- structure(
  list(date1 = c("2021-06-28","2021-06-28","2021-06-28","2021-06-28","2021-06-28",
                 "2021-06-28","2021-06-28","2021-06-28","2021-06-28","2021-06-28"),
       date2 = c("2021-04-02","2021-04-02","2021-04-03","2021-04-08","2021-04-09","2021-04-10","2021-07-01","2021-07-02","2021-07-03","2021-07-03"),
       Week= c("Friday","Friday","Saturday","Thursday","Friday","Saturday","Thursday","Friday","Saturday","Saturday"),
       D1 = c(2,3,4,4,6,3,4,5,6,2), DR01 = c(4,1,4,3,3,4,3,6,3,2), DR02= c(4,2,6,7,3,2,7,4,4,3),DR03= c(9,5,4,3,3,2,1,5,4,3),
       DR04 = c(5,4,3,3,3,6,2,1,9,2),DR05 = c(5,4,5,3,6,2,1,9,3,4),
       DR06 = c(2,4,4,3,3,5,6,7,8,3),DR07 = c(2,5,4,4,9,4,7,8,3,3),
       DR08 = c(0,0,0,0,1,2,0,0,0,0),DR09 = c(0,0,0,0,0,0,0,0,0,0),DR010 = c(0,0,0,0,0,0,0,0,0,0),DR011 = c(0,4,0,0,0,0,0,0,0,0), DR012 = c(0,0,0,0,0,0,0,0,0,0)),
  class = "data.frame", row.names = c(NA, -10L))

# 删除全为0的数值列
df1 <- df1 %>%
  select(!where(~ is.numeric(.) && all(. == 0)))

# 分组求和,.groups = "drop" 可选,用于汇总后自动取消分组
df1 <- df1 %>%
  group_by(date1, date2, Week) %>%
  summarise(across(D1:last_col(), sum), .groups = "drop")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:03