美文网首页科研信息学
R语言排错之因子化(factor)的陷阱

R语言排错之因子化(factor)的陷阱

作者: 灵活胖子的进步之路 | 来源:发表于2020-12-13 13:03 被阅读0次

    昨天帮同学跑数据,里面大部分都是字符型向量,只有少部分为连续向量,因此想通过apply函数吧读入的数据所有列内容先用factor变为因子向量,然后再用as.numerich函数结合apply函数把需要为数值型的向量再转回来,这样可以统一格式,代码如下

    newdata<-read.csv("newdata.csv",header = T,check.names = F)
    attach(newdata)
    str(newdata)
    
    读入数据原始结果
    newdata[colnames(newdata)] <- lapply(newdata[colnames(newdata)],factor)
    #利用apply函数将所有列内容因子话并展示
    str(newdata)
    
    所有列因子化
    varsTonum <- c("CID","Age","bmi","stay","blood.transfusion","operation.duration")
    #需要转回数值型变量的列向量
    newdata[varsTonum] <- lapply(newdata[varsTonum],as.numeric)
    #利用apply函数将其转回
    str(newdata)
    
    转回后数据结构

    可以从转回后的数据结构看出,Age和bmi的数值和原来是不一样的,以Age为例,重新跑一次数据看Age的变化情况


    转化前Age数值
    转化后Age数值

    数值改变的原因是因为数值转换为因子变量后,其数值本身就转变为了因子的秩次信息,再次转回数值型变量其本质是把因子的秩次转回,如下图,第2位44的levels位第4位,所以转回后期数值为4,不再是44了。


    转为因子后的Age结构

    解决方案

    在读入文件时加上stringasfactor=F命令,并尽量不应用因子型向量

    newdata<-read.csv("newdata.csv",
                      header = T,
                      check.names = F,
                      stringsAsFactors = F)
    

    相关文章

      网友评论

        本文标题:R语言排错之因子化(factor)的陷阱

        本文链接:https://www.haomeiwen.com/subject/otougktx.html