You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:14