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

如何在R语言中利用数据字典为数据框添加值标签

为CSV数据添加值标签(实现haven_labelled格式)

你可以用haven包直接创建带值标签的变量,结合dplyr批量处理,完美复现从.dta/.sav文件加载后的带标签数值格式,而不是将数值转为字符型。

步骤1:加载所需包

library(haven)
library(dplyr)
library(tidyr)

步骤2:整理数据字典

先把数据字典转换成「变量名-值标签映射」的列表结构,方便后续批量应用:

# 过滤掉无标签的行,按变量分组生成标签向量
label_maps <- dd %>%
  filter(!is.na(variable.label)) %>%
  group_by(variable.name) %>%
  summarise(labels = set_names(value, variable.label), .groups = "drop") %>%
  deframe()

步骤3:为数据框变量批量添加标签

用haven::labelled()函数为指定变量附加标签,同时保留原始数值类型:

df_labelled <- df %>%
  mutate(across(all_of(names(label_maps)), ~labelled(., labels = label_maps[[cur_column()]])))

验证结果

查看处理后的变量结构,和你期望的格式完全一致:

str(df_labelled$sex)
# 输出:
# haven_labelled<double> [1:10]
#  Labels:
#  value label
#      1  male
#      2 female

str(df_labelled$age)
# 输出:
# haven_labelled<double> [1:10] 5, 5, 5, 5, 5, 5, 5, 5, 5, -96
#  Labels:
#  value  label
#    -96 missing

关键说明

  • haven::labelled()是核心:它会保留原始数值的类型(整数/双精度),同时在变量元数据中存储值标签,和Stata/SAS文件加载后的格式完全匹配。
  • 批量处理:通过dplyr::across()可以一次性处理所有在数据字典中定义的变量,无需逐个手动转换。
  • 和matchmaker的区别:match_df是把数值替换成对应的字符,而此方法是保留原始数值,仅添加标签元数据,这正是你需要的效果。

内容的提问来源于stack exchange,提问作者T.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:05:20