• 对数据缺失的处理(R)


    在进行数据分析之前,我们往往需要对数据进行预处理,而最重要一部分就是怎么处理哪些缺失的数据。

    通常的方法有四种:

    1. 删除这些缺失的数据。
    2. 用最高频数来补充缺失数据。
    3. 通过变量的相关关系来填充缺失值。
    4. 通过案例之间的相似性来填充缺失值。

    下面通过R语言对上面4种方法进行说明(algae数据来源:http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR/extraFiles.html)

    #方法一:删除这些缺失的数据。
    algae[!complete.cases(algae),];#显示所有含有缺失数据的行
    nrow(algae[!complete.cases(algae),]);#行数ncol():列数
    algae<-na.omit(algae);#删除缺失数据的行。
    data(algae);
    manyNAs(algae,0.3);#得到缺失值个数大于列数30%的行标。
    apply(algae,1,function(x)sum(is.na(x)));#统计每行中含有缺失数据的个数。
    apply(algae,2,function(x)sum(is.na(x)));#统计每列中含有缺失数据的个数。
    algae<-algae[-c(62,199),];#删除含有较多缺失数据的行。
    #方法二:用最高频数来补充缺失数据
    data(algae);
    algae[48,"mxPH"]<-mean(algae$mxPH,na.rm=T);#使用平均值(正态分布)补充缺失的数据。
    algae[is.na(algae$Cl),"Cl"]<-median(algae$Cl,na.rm=T);#使用中位数补充这一列中所有缺失的数据
    #方法三:通过变量的相关关系来填充缺失值
    #1、使用函数cor()来获取变量之间的相关值矩阵。
    cor(algae[,4:18],use="complete.obs");
    symnum(cor(algae[,4:18],use="complete.obs"));
    #2、通过得到的关联矩阵,得到哪些变量之间有较强的线性关系
    data(algae);
    algae<-algae[-manyNAs(algae),];
    lm(PO4~oPO4,data=algae);#通过函数lm(,)来得到它们线性关系PO4=a+b*oPo4;
    algae[28,"PO4"]<-42.897+1.293*algae[28,"oPO4"];
    #建立一个函数;
    fillP04<-function(x){
          if(is.na(x))
            retrun(NA)
          else
            return(42.897+1.293*x)
    }
    algae[is.na(algae$PO4),"PO4"]<-sapply(algae[is.na(algae$PO4),"oPO4"],fillP04);
    histogram(~mxPH|size*speed,data = algae);
    #方法四: 通过案例之间的相似性来填充缺失值
    algae<-knnImputation(algae,k=10);
    algae<-knnImputation(algae,k=10,meth="median");

  • 相关阅读:
    重读金典------高质量C编程指南(林锐)-------第四章 表达式和基本语句
    重读金典------高质量C编程指南(林锐)-------第三章 命名规则
    重读金典------高质量C编程指南(林锐)-------第二章 程序的板式
    重读金典------高质量C编程指南(林锐)-------第一章 文件结构
    链表的基本操作---创建
    实现两个数的互换算法小结
    C++中引用与指针的区别
    以前写的一些小程序总结
    OPENCV中数字图像处理知识运用
    常见的论文查找办法
  • 原文地址:https://www.cnblogs.com/whb-20160329/p/5678618.html
Copyright © 2020-2023  润新知