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

dplyr中group_by会改变across引用的列索引,如何避免?

分组后使用dplyr::across避免列索引偏移的方法

这确实是dplyr的预期行为:当数据框被group_by()分组后,分组列会被前置到数据结构的最前面,导致原有的列位置索引发生偏移,直接用固定数值索引调用across()就会报错。

下面是几种可靠的解决方法:

1. 直接使用列名(最推荐)

完全规避索引偏移问题,不管是否分组都能稳定生效:

# 明确指定目标列名
df_grouped %>% 
  mutate(across(c(val1, val2, val3), ~"changed"))

# 用匹配规则批量选择(比如匹配以"val"开头的列)
df_grouped %>% 
  mutate(across(starts_with("val"), ~"changed"))

2. 按列类型选择

如果目标列有统一的数据类型(比如都是数值型),可以用where()选择器批量匹配:

df_grouped %>% 
  mutate(across(where(is.numeric), ~"changed"))

3. 基于原始索引的兼容写法(不推荐,但可应急)

如果一定要用列索引,可以结合all_of()函数,基于原始数据框的列位置指定目标列,不受分组影响:

# 先定义原始数据中的目标列索引
target_cols <- 2:4
df_grouped %>% 
  mutate(across(all_of(target_cols), ~"changed"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:54:51