R报错| 无法转换数据类型 Can‘t convert `value` <character> to <double>.

常见于使用haven包导入数据之后试图重编码的过程中。

>   df.ind$egp <- car::recode(df.ind$qg303code_egp, "1:2='管理者和专业技术人员';
+                             3='一般非体力劳动者';
+                             4:5='自营业主';
+                             7:9='工人';
+                             10:11='农民'", as.factor=T)

运行上述代码,显示:

Error in `[<-`:
! Can't convert `value` <character> to <double>.
Run `rlang::last_trace()` to see where the error occurred.

解决办法是使用as.numeric或其他类似的函数先将变量类型转换好。

另外可以避免使用car::recode。

最终解决代码:

  df.ind$egp <- as.numeric(df.ind$qg303code_egp)

  df.ind$egp[df.ind$egp<=2] <- '管理者和专业技术人员'
  df.ind$egp[df.ind$egp==3] <- '一般非体力劳动者'
  df.ind$egp[df.ind$egp>3&df.ind$egp<6] <- '自营业主'
  df.ind$egp[df.ind$egp==7|df.ind$egp==8|df.ind$egp==9] <- '工人'
  df.ind$egp[df.ind$egp==10|df.ind$egp==11] <- '农民'

  df.ind$egp <- factor(df.ind$egp, levels=c("一般非体力劳动者",
                                            "管理者和专业技术人员",
                                            "自营业主",
                                            "工人",'农民'))

在本变量的重编码过程中还需要注意一个问题。变量从数字转换为字符需要一个过程,当字符串较多时,变量的类别将自动变为character,无法再使用大于小于来制定recode规则。这也是以上代码从“工人”开始改变了recode规则的原因。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值