如何基于标签为SPSS标记数据框的指定标签值批量设置NA?
基于标签批量将SPSS带标签变量的指定类别设为NA
问题场景
现有带SPSS标签的tibble数据,同一标签(如dk、does not apply)在不同变量中对应不同数值,需要无需硬编码数值、无需逐个指定变量名,仅通过标签将这些类别对应的数值设为NA。
解决方案
利用labelled包的set_na_labels()函数结合dplyr的across()实现批量处理:
步骤1:定义需要转为NA的标签
my_na_labels <- c("dk", "does not apply")
步骤2:批量处理目标变量
如果明确要处理的变量名,直接指定:
library(labelled) library(tidyverse) test %>% mutate(across(c(var_1, var_2), ~ set_na_labels(., labels = my_na_labels)))
如果要处理所有带标签的变量(无需手动指定变量名),用where(is.labelled)自动筛选:
test %>% mutate(across(where(is.labelled), ~ set_na_labels(., labels = my_na_labels)))
效果验证
运行后会得到如下结果,目标标签对应的数值被标记为NA,同时保留原标签显示:
# A tibble: 6 × 2 var_1 var_2 <dbl+lbl> <dbl+lbl> 1 1 [Terrible] 1 [Terrible] 2 2 [Meh] 2 [Meh] 3 3 [Better] 3 [Better] 4 4 [Awesome] 4 [Awesome] 5 89 (NA) [dk] 890 (NA) [dk] 6 999 (NA) [does not apply] 998 (NA) [does not apply]
原理说明
set_na_labels():labelled包内置函数,可直接通过标签名称定位对应的数值,将其设为NA值,无需手动匹配标签与数值的对应关系。across():dplyr工具,实现对多个变量的批量操作,配合where(is.labelled)可自动筛选所有带标签的变量,实现完全通用的批量处理。
内容的提问来源于stack exchange,提问作者Tea Tree
相关产品推荐
相关产品推荐

