使用haven标记变量标签的tibble执行pivot_longer时,如何将变量标签而非变量名填入name列?
使用haven标记变量标签的tibble执行pivot_longer时,如何将变量标签而非变量名填入name列?
嗨,我懂你不想用那种先转长再手动替换的繁琐方法,其实有更简洁的实现方式,能在转置的同时直接把变量名换成对应标签,一步到位!
方法一:利用pivot_longer的names_transform参数(推荐)
先提取变量名和标签的映射关系,然后在转置时直接完成替换:
# 先获取变量名与标签的映射表 label_mapping <- var_label(tbl) %>% unlist() # 执行转置并同时替换name列内容 tbl |> tidyr::pivot_longer( cols = -id, # 排除id列,转置其余列 names_transform = list(name = ~ label_mapping[.x]) # 将变量名替换为对应标签 )
这种方式既不用额外修改原数据结构,也省去了后续的mutate步骤,非常高效。
方法二:先重命名列名再转置
如果你不介意临时修改列名,也可以先把原数据的列名替换成标签,再执行转置:
tbl |> rename(!!!label_mapping) |> # 将列名替换为对应的变量标签 tidyr::pivot_longer(cols = -id)
不过这种方法会改变原数据的列名,如果后续还需要用到原始变量名的话,就不太推荐啦。
备注:内容来源于stack exchange,提问作者RoyalTS
相关产品推荐
相关产品推荐

