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

基于dplyr处理数字列名的指定列均值合并问题

解决数字列名在dplyr中选择与行均值计算的问题

嘿,我碰到过好几次这种纯数字列名在dplyr里不好操作的情况,给你几个实用的解决方案,完美匹配你的需求:计算指定数字列的行均值、生成新列,同时保留指定列。

首先要注意一个关键细节:你的示例数据里数值列都是字符类型,第一步必须转换成数值型,不然rowMeans会报错。

方法1:用across()处理带反引号的列名范围

这是最直观的dplyr风格写法,across()可以轻松识别带反引号的数字列名范围:

library(dplyr)

# 先转换数值列的类型(字符转数值)
df_clean <- df %>%
  mutate(across(c(`1`, `2`, `34`, `158`, `190`), as.numeric))

# 计算行均值并生成目标数据框
result_df <- df_clean %>%
  mutate(
    Column1 = rowMeans(across(`1`:`2`)),       # 计算1-2列的行均值
    Column2 = rowMeans(across(`34`:`158`)),    # 计算34-158列的行均值
    Column3 = `190`                            # 保留190列并重命名为Column3
  ) %>%
  select(Column1, Column2, Column3)            # 只保留需要的新列

方法2:用列位置选择(适合列顺序固定的场景)

如果你的数据框列顺序不会变动,直接用列的位置索引会更简洁,不用打反引号:

result_df <- df_clean %>%
  mutate(
    Column1 = rowMeans(across(2:3)),    # 1、2列对应数据框的第2、3列
    Column2 = rowMeans(across(4:5)),    # 34、158列对应第4、5列
    Column3 = `190`
  ) %>%
  select(Column1, Column2, Column3)

方法3:用num_range()匹配数字列名(最简洁的写法)

针对纯数字列名,num_range()可以直接匹配指定范围的数字列,代码更清爽:

result_df <- df_clean %>%
  mutate(
    Column1 = rowMeans(across(num_range("", 1:2))),       # 匹配列名1、2
    Column2 = rowMeans(across(num_range("", 34:158))),    # 匹配列名34到158
    Column3 = `190`
  ) %>%
  select(Column1, Column2, Column3)

最终输出结果

运行上述代码后,你会得到符合预期的目标数据框:

Column1 Column2 Column3
1     1.9    3.40    22.1
2     6.8    1.65     7.4
3     4.7   23.85    56.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:52:41