R语言使用case_when报错:无法合并haven_labelled与double类型
按年龄分组报错的解决方法
错误原因
你的agea变量是haven_labelled类型(一般是用haven包读取SPSS/SAS等带标签格式的数据集时生成的),而你用来做比较的15、30等是普通数值(double类型),R无法直接对这两种不同类型的数据执行比较运算,因此触发报错。
解决方法
需要先把agea转换成普通数值型变量,再执行分组操作,有两种方式可选:
方式一:先转换变量再分组
# 移除agea的标签属性,保留原始数值 ess10_de$agea <- haven::zap_labels(ess10_de$agea) # 也可以直接转成数值:ess10_de$agea <- as.numeric(ess10_de$agea) # 执行分组 ess10_de <- mutate(ess10_de, age_group = case_when( agea >=15 & agea <30 ~1, agea >=30 & agea <50 ~2, agea >=50 & agea <70 ~3, agea >=70 & agea <91 ~4, is.na(agea) ~ NA_real_ ))
方式二:在分组时直接转换
ess10_de <- mutate(ess10_de, age_group = case_when( as.numeric(agea) >=15 & as.numeric(agea) <30 ~1, as.numeric(agea) >=30 & as.numeric(agea) <50 ~2, as.numeric(agea) >=50 & as.numeric(agea) <70 ~3, as.numeric(agea) >=70 & as.numeric(agea) <91 ~4, is.na(agea) ~ NA_real_ ))
注意事项
如果你的agea变量的标签和实际存储的数值不一致,优先用haven::zap_labels(),它会保留原始数值同时移除标签属性;若标签和数值一致,两种方法效果相同。
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

