常见于使用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规则的原因。