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

如何将tidycensus输出的变量替换为描述性名称?

为ACS5 DP05数据集设置描述性列名的方法

方法一:利用load_variables结果批量重命名列

你已经通过load_variables获取了DP05表的变量描述,只需建立原始列名和描述的映射关系,就能一键重命名:

  1. 先筛选出DP05相关的变量信息:
# 提取DP05表的变量名和对应描述
dp05_vars <- mn2022 %>%
  filter(grepl("^DP05_", name)) %>%
  select(name, label)
  1. 构建列名映射(适配宽格式的E/M后缀,分别对应估计值和边际误差):
# 创建原始列名到新描述性列名的映射向量
name_mapping <- dp05_vars %>%
  mutate(
    # 生成带E/M后缀的原始列名和对应的描述性名称
    original_e = paste0(name, "E"),
    original_m = paste0(name, "M"),
    new_e = paste0(label, " (估计值)"),
    new_m = paste0(label, " (边际误差)")
  ) %>%
  # 转换为长格式后提取映射关系
  pivot_longer(
    cols = c(original_e, original_m),
    names_to = "type",
    values_to = "original_col"
  ) %>%
  pivot_longer(
    cols = c(new_e, new_m),
    names_to = "type2",
    values_to = "new_col"
  ) %>%
  filter(str_remove(type, "original_") == str_remove(type2, "new_")) %>%
  select(original_col, new_col) %>%
  deframe()

# 保留地理标识列的名称(如GEOID、NAME)
geo_mapping <- c("GEOID" = "GEOID", "NAME" = "县名称")
name_mapping <- c(geo_mapping, name_mapping)
  1. 对数据集执行重命名:
mn_val_wide_named <- mn_val_wide %>%
  rename(!!!name_mapping)

方法二:从长格式数据直接生成带描述的宽表

如果一开始用长格式获取数据,合并描述后再转宽,流程会更直观:

# 获取长格式的ACS数据
mn_val_long <- get_acs(
  year = 2022,
  geography = "county",
  table = "DP05",
  state = "MN",
  output = "tidy",
  survey = "acs5"
)

# 合并变量描述并生成新列名
mn_val_long_named <- mn_val_long %>%
  left_join(mn2022, by = c("variable" = "name")) %>%
  mutate(
    measure_type = ifelse(moe, "边际误差", "估计值"),
    new_col_name = paste0(label, " (", measure_type, ")")
  )

# 转换为宽格式
mn_val_wide_named2 <- mn_val_long_named %>%
  select(GEOID, NAME, new_col_name, estimate) %>%
  pivot_wider(names_from = new_col_name, values_from = estimate)

方法三:为变量添加标签(保留原始列名的同时显示描述)

如果不想修改列名,只想在查看或导出时显示描述,可以用var_label给变量添加标签:

# 为每个DP05变量添加描述性标签
mn_val_wide_labeled <- mn_val_wide %>%
  mutate(across(starts_with("DP05_"), function(x) {
    # 提取不带E/M后缀的变量名
    var_code <- str_remove(cur_column(), "[EM]$")
    # 匹配对应的描述
    var_desc <- dp05_vars$label[dp05_vars$name == var_code]
    # 添加标签(标注是估计值还是边际误差)
    var_label(x) <- paste0(var_desc, " (", str_extract(cur_column(), "[EM]$"), ")")
    return(x)
  }))

# 查看带标签的数据(用View或tibble打印时会显示标签)
View(mn_val_wide_labeled)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:52:46