zoukankan      html  css  js  c++  java
  • 对数据缺失的处理(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");

  • 相关阅读:
    【Qt开发】 V4L2_CAP_VIDEO_OVERLAY与V4L2_CAP_VIDEO_CAPTURE的区别
    【Qt开发】QThread 实用技巧、误区----但文档中没有提到
    【Qt开发】QThread 实用技巧、误区----但文档中没有提到
    【Qt开发】事件循环与线程 二
    【Qt开发】事件循环与线程 二
    【Qt开发】事件循环与线程 一
    【Qt开发】事件循环与线程 一
    【Qt开发】QThread介绍
    【Qt开发】QThread介绍
    【Linux开发】如何查看Linux kernel的内置模块驱动列表和进程ID
  • 原文地址:https://www.cnblogs.com/whb-20160329/p/5678618.html
Copyright © 2011-2022 走看看