如何使用tidyverse语法批量修改多个变量的值标签
tidyverse工作流下批量设置
labelled值标签方法 labelled包原生支持一次性给多个变量设置值标签,基础R语法的实现示例:
df <- data.frame(v1 = 1:3, v2 = c(2, 3, 1), v3 = 3:1) val_labels(df[, c("v1", "v3")]) <- c(YES = 1, MAYBE = 2, NO = 3) val_labels(df)
如果要在tidyverse管道流里实现完全相同的批量操作,你最初写的mutate+across写法有两个问题:一是函数参数位置写错,把要应用的函数放到了across括号外面;二是赋值操作默认返回赋值内容,不会返回修改后的列,会直接覆盖原始列数据。
修正后的可运行写法如下:
library(tidyverse) library(labelled) df <- df %>% mutate( across(c(v1, v3), ~{ val_labels(.x) <- c(YES = 1, MAYBE = 2, NO = 3) .x }) )
如果不习惯公式风格的匿名函数,也可以写标准匿名函数,逻辑完全一致:
df <- df %>% mutate( across(c(v1, v3), function(x) { val_labels(x) <- c(YES = 1, MAYBE = 2, NO = 3) x }) )
运行后和原生labelled赋值方法的效果完全一致,可以调用val_labels(df)校验结果。
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

