如何为不细阅码本的数据集用户区分缺失值类型:无应答vs结构缺失
不同类型缺失值区分方案
核心思路是将隐含在码本中的缺失类型规则,转化为数据集内的显式信息,降低对用户阅读码本的要求,可选择以下三种方案:
- 方案1:使用不同的显式值区分不同类型的缺失(优先推荐)
统一用NA表示所有缺失是导致歧义的核心原因,我们可以分别为不同类型的缺失赋予可直接识别的特殊值,比如结构缺失(不符合跳题规则无需作答)用".不适用",无应答缺失(符合作答条件但未回答)用".未作答",特殊值可加特殊前缀避免和正常回答内容冲突。
示例代码如下:
library(tidyverse) df <- tibble(q1 = c("Yes", "Yes", "No", "No"), q2 = c("Yes", NA, NA, NA)) # 替换缺失值为显式分类 df_fixed <- df %>% mutate(q2 = case_when( q1 == "No" ~ ".不适用", # 匹配结构缺失场景 is.na(q2) ~ ".未作答", # 匹配无应答缺失场景 TRUE ~ q2 )) # 直接按q2分组即可区分三类情况,无需关联其他字段或查看码本 df_fixed %>% group_by(q2) %>% count()
运行后汇总结果会显示3个分组:Yes(1个)、.未作答(1个)、.不适用(2个),完全消除歧义。
该方案对无码本阅读习惯的用户友好度最高,没有额外使用门槛,仅当需要保留原变量的数值类型时不适用。
- 方案2:新增跳题资格辅助列
为每个带跳题规则的变量新增配套的资格标识列,比如针对q2新增q2_eligibility列,取值为需作答/无需作答,用户可通过该列判断q2的缺失属于哪种类型。
示例代码如下:
df_fixed2 <- df %>% mutate(q2_eligibility = ifelse(q1 == "Yes", "需作答", "无需作答"))
该方案的优势是不改动原有变量的取值和类型,适合需要保留原变量数值属性的场景;缺点是用户做统计时需要关联辅助列才能区分缺失类型。
- 方案3:给变量添加内置属性标签
可以通过变量值标签功能标注不同缺失对应的类型,R中可以用attr()函数或者labelled、haven包实现,SPSS、Stata等统计软件原生支持该功能。该方案不改动原始数据结构,符合专业统计规范;但仅支持读取变量属性的工具才能看到标签,普通用户用基础函数汇总时还是无法直接区分缺失类型。
内容的提问来源于stack exchange,提问作者Eric Green
相关产品推荐
相关产品推荐

