如何生成labelled函数所需的标签文本与数值配对格式
解决labelled函数labels参数的批量生成问题
需求背景
要在空虚拟数据集里创建带标签的变量,需要复用已有分类变量(比如Leeftijd)的标签体系,避免手动输入大量无规律的类别。
已完成的工作
- 从目标变量的文本描述中提取出标签文本
d和对应数值numbers:
numbers <- unlist(str_extract_all(text, "(?<!\\d)\\d+")) numbers <- as.numeric(numbers)
d <- head(unlist(str_split(text, "(?<!\\d)\\d+")), -1) d <- gsub("[\\r\\n]", "", d) d <- str_trim(d, side = "both")
- 尝试用
paste/paste0等函数拼接成labelled函数要求的labels = c("标签" = 数值, ...)格式,但始终无法得到正确结构,测试示例:
d <- c("apple", "banana", "lychee") numbers <- c(1, 5, 8) paste(d, "=", numbers) # [1] "apple = 1" "banana = 5" "lychee = 8" paste0("\"", d, "\" = ", numbers, ",") # [1] "\"apple\" = 1," "\"banana\" = 5," "\"lychee\" = 8,"
解决方案
不需要手动拼接字符串,直接用命名向量生成符合要求的labels参数:
# 将numbers作为向量值,d作为向量名称,生成命名向量 labels_vec <- setNames(numbers, d) # 传入labelled函数创建变量 example_variable <- labelled(sample(numbers, N, replace = T), labels = labels_vec)
验证示例
用测试数据验证生成的结构:
d <- c("apple", "banana", "lychee") numbers <- c(1, 5, 8) labels_vec <- setNames(numbers, d) # 输出结果完全符合要求: # apple banana lychee # 1 5 8
补充优化
如果原始Leeftijd变量本身是labelled类型,可直接提取它的标签,省去文本解析步骤:
# 假设Leeftijd是已有的labelled变量 labels_vec <- attr(Leeftijd, "labels") # 直接复用该向量创建新变量即可
内容的提问来源于stack exchange,提问作者Shems Vouwzee
相关产品推荐
相关产品推荐

