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

如何基于另一数据框的变量映射对R数据框列重命名?

解决方法:按df1映射替换df2列名

正确实现方式

方式1:使用dplyr的rename_with

先构建var到tes的映射关系,再通过rename_with完成替换:

library(dplyr)

# 创建命名映射向量:var值作为名称,对应tes值作为向量元素
name_mapping <- setNames(df1$tes, df1$var)

# 重命名df2的列
df2_renamed <- df2 |>
  rename_with(
    ~ case_when(
      .x %in% names(name_mapping) ~ name_mapping[.x],
      TRUE ~ .x  # 保留不需要替换的列名(比如id)
    )
  )

# 查看结果
df2_renamed

输出结果:

id meeny catch
1  1    12    22
2  2    13    23
3  3    14    24

也可以简化写法,直接利用命名向量的索引特性:

df2_renamed <- df2 |>
  rename_with(~ name_mapping[.x], all_of(intersect(names(name_mapping), names(df2))))

方式2:基础R实现

不需要dplyr的话,直接操作列名:

# 筛选df2中需要替换的列名
target_cols <- intersect(names(df2), df1$var)
# 匹配对应的tes值并替换列名
names(df2)[names(df2) %in% target_cols] <- df1$tes[match(target_cols, df1$var)]

df2

原代码错误原因

你之前的代码错误在于rename_with的.fn参数要求传入返回字符向量的函数,但你直接传入了数据框df1,不符合参数要求。正确的逻辑是基于列名,从映射关系中找到对应的新名称,而不是直接传入整个数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:55:16