基于另一数据框替换统计结果列名(不修改原数据框)
解决方案
你可以通过构建列名到标签的映射向量,再修改统计结果列表的名称来实现需求,全程不需要改动原数据框df的列名。
步骤1:构建列名-标签映射
先把data_dict转换成一个命名向量,方便后续匹配:
library(tidyverse) # 从数据字典生成映射:键是Field Name,值是Field Label label_mapping <- data_dict %>% deframe() # 可选:如果df里有data_dict未覆盖的列(比如示例中的record_id),手动补充或保留原列名 label_mapping <- c(label_mapping, record_id = "Record ID")
步骤2:生成统计结果并替换名称
执行统计后,直接修改结果列表的名称:
# 生成统计结果 stats_summary <- df %>% map(~ table(.x, useNA = "ifany")) # 替换列表名称为对应的Field Label names(stats_summary) <- label_mapping[names(stats_summary)]
简化写法(合并为一步)
如果想更简洁,也可以把两步合并:
stats_summary <- df %>% map(~ table(.x, useNA = "ifany")) %>% set_names(coalesce(label_mapping[names(.)], names(.)))
关键说明
deframe()自动将data_dict的两列转换为命名向量,用Field Name做键、Field Label做值,完美匹配列名与标签的对应关系。coalesce()用于兜底:如果某列在data_dict中没有对应标签,会保留原列名,避免出现空名称的情况。
内容的提问来源于stack exchange,提问作者user123
相关产品推荐
相关产品推荐

