精华内容
下载资源
问答
  • R语言数据清洗

    千次阅读 多人点赞 2018-04-23 21:48:34
    R语言数据清洗 一般来说,在获得了原始数据之后,不能直接开始进行统计分析等操作。因为通常我们获得的数据都是「脏」数据,在分析之前需要进行数据的清洗。对于清洁的数据(tidy data)的定义为: - 每个变量各占...

    R语言数据清洗

    一般来说,在获得了原始数据之后,不能直接开始进行统计分析等操作。因为通常我们获得的数据都是「脏」数据,在分析之前需要进行数据的清洗。对于清洁的数据(tidy data)的定义为:
    - 每个变量各占一列
    - 每个观测值各占一行
    - 每个表格或者文件只储存一种观测值的数据
    对于数据清洗,Python中著名的pandas包可以进行十分方便的处理([具体可见这篇博文])。而在R中,也有dplyr包以及tidyr包用来进行数据的整理。

    dplyr包

    dplyr包的作者是著名的ggplot2包的Hadley Wickham。这个包主要针对数据框(dataframe)进行数据的清洗和整理。dplyr包主要有以下几个函数:
    1. 选择:select()
    2. 筛选:filter()
    3. 排序:arrange()
    4. 分组:group_by()
    5. 汇总:summarise()
    6. 变形:mutate()
    这几个函数的具体用法及其例子,在优秀博文:「[【R语言】必学包之dplyr包]」(作者:Kingsley W)中做了详细的介绍。

    tidyr 包

    这个包的作者也是Hedley Wickham,其主要的几个函数为:
    1. 长宽数据的转换:gather()spread()
    2. 数据的合并:unit()
    3. 数据的分离:separate()
    具体用法以及示例,可以参考一下的几篇博文:
    1. [tidyr之gather、separate、spread…]
    2. [缺失值,表整理—tidyr包]


    在Rstudio上,有一份文档进行了很好的总结:
    这里写图片描述
    这里写图片描述

    展开全文
  • R 语言中,可以使用函数 is.na()判断缺失值是否存在,缺失值通常以 NA 表示。另外 函数 complete.case()也可识别样本数据是否完整从而判断缺失情况。...实验目的 ① 掌握 R 语言数据清洗的常用...

     在 R 语言中,可以使用函数 is.na()判断缺失值是否存在,缺失值通常以 NA 表示。另外 函数 complete.case()也可识别样本数据是否完整从而判断缺失情况。 在异常值处理之前需要对异常值进行识别,一般多采用单变量散点图或是箱状图进行表 示。在 R 中,使用函数 dotchart()、boxplot()实现绘制单变量散点图与箱形图。

    实验目的 ① 掌握 R 语言中数据清洗的常用函数; ② 掌握数据的导入导出; ③ 熟悉 R 语言对数据清洗的一般思路。

    实验内容 ① 将 bank-additional-full.csv 数据导入到 R; ② 对数据中的缺失值、异常值以及不一致值进行识别和处理。

    > mydata<-read.csv("bank-additional-full.csv",sep=";")
    > mydata$job[which(mydata$job=='unknown')]<-NA
    > mydata$default[which(mydata$default=='unknown')]<-NA
    > mydata$education[which(mydata$education=='unknown')]<-NA
    > mydata$housing[which(mydata$housing=='unknown')]<-NA
    > mydata_2<-is.na(mydata)
    > head(mydata_2,3)
           age   job marital education default housing  loan contact month
    [1,] FALSE FALSE   FALSE     FALSE   FALSE   FALSE FALSE   FALSE FALSE
    [2,] FALSE FALSE   FALSE     FALSE    TRUE   FALSE FALSE   FALSE FALSE
    [3,] FALSE FALSE   FALSE     FALSE   FALSE   FALSE FALSE   FALSE FALSE
         day_of_week duration campaign pdays previous poutcome emp.var.rate
    [1,]       FALSE    FALSE    FALSE FALSE    FALSE    FALSE        FALSE
    [2,]       FALSE    FALSE    FALSE FALSE    FALSE    FALSE        FALSE
    [3,]       FALSE    FALSE    FALSE FALSE    FALSE    FALSE        FALSE
         cons.price.idx cons.conf.idx euribor3m nr.employed     y
    [1,]          FALSE         FALSE     FALSE       FALSE FALSE
    [2,]          FALSE         FALSE     FALSE       FALSE FALSE
    [3,]          FALSE         FALSE     FALSE       FALSE FALSE
    > mydata_3<-complete.cases(mydata)
    > head(mydata_3,5)
    [1]  TRUE FALSE  TRUE  TRUE  TRUE
    > mydata_4<-mydata[!complete.cases(mydata),]
    > head(mydata_4,3)
      age         job marital   education default housing loan   contact month
    2  57    services married high.school    <NA>      no   no telephone   may
    6  45    services married    basic.9y    <NA>      no   no telephone   may
    8  41 blue-collar married        <NA>    <NA>      no   no telephone   may
      day_of_week duration campaign pdays previous    poutcome emp.var.rate
    2         mon      149        1   999        0 nonexistent          1.1
    6         mon      198        1   999        0 nonexistent          1.1
    8         mon      217        1   999        0 nonexistent          1.1
      cons.price.idx cons.conf.idx euribor3m nr.employed  y
    2         93.994         -36.4     4.857        5191 no
    6         93.994         -36.4     4.857        5191 no
    8         93.994         -36.4     4.857        5191 no
    > colSums(is.na(mydata))
               age            job        marital      education        default 
                 0            330              0           1731           8597 
           housing           loan        contact          month    day_of_week 
               990              0              0              0              0 
          duration       campaign          pdays       previous       poutcome 
                 0              0              0              0              0 
      emp.var.rate cons.price.idx  cons.conf.idx      euribor3m    nr.employed 
                 0              0              0              0              0 
                 y 
                 0 
    > sum(!complete.cases(mydata))
    [1] 10641
    > mean(!complete.cases(mydata))
    [1] 0.2583519
    > mydata_5<-na.omit(mydata)
    > head(mydata_5,3)
      age       job marital   education default housing loan   contact month
    1  40 housemaid married    basic.4y      no      no   no telephone   may
    3  37  services married high.school      no     yes   no telephone   may
    4  40    admin. married    basic.6y      no      no   no telephone   may
      day_of_week duration campaign pdays previous    poutcome emp.var.rate
    1         mon      261        1   999        0 nonexistent          1.1
    3         mon      226        1   999        0 nonexistent          1.1
    4         mon      151        1   999        0 nonexistent          1.1
      cons.price.idx cons.conf.idx euribor3m nr.employed  y
    1         93.994         -36.4     4.857        5191 no
    3         93.994         -36.4     4.857        5191 no
    4         93.994         -36.4     4.857        5191 no
    > mydata$age[which(mydata$age=='56')]<-NA
    > mydata$age[is.na(mydata$age)]<-round(mean(mydata$age,na.rm = TRUE))
    > head(mydata$age,5)
    [1] 40 57 37 40 40
    > mydata$job[which(mydata$job=='unknown')]<-NA
    > mydata_clear1<-na.omit(mydata)
    > mydata_clear2<-subset(mydata_clear1,select = -poutcome)
    > set.seed(1)
    > index<-sample(1:nrow(mydata_clear2),5)
    > index
    [1] 17401 24388  4775 26753 13218
    > mydata_clear2$age[index]
    [1] 36 36 46 32 39
    > mydata_clear2$age[index]<-mydata_clear2$age[index]*3
    > mydata_clear2$age[index]
    [1] 108 108 138  96 117

     

    > boxplot(mydata_clear2$age,boxwex=0.7)


    > index2<-which(mydata_clear2$age>=80)
    > mydata_clear2<-mydata_clear2[-index2,]
    > head(mydata_clear2,5)
      age       job marital           education default housing loan   contact
    1  40 housemaid married            basic.4y      no      no   no telephone
    3  37  services married         high.school      no     yes   no telephone
    4  40    admin. married            basic.6y      no      no   no telephone
    5  40  services married         high.school      no      no  yes telephone
    7  59    admin. married professional.course      no      no   no telephone
      month day_of_week duration campaign pdays previous emp.var.rate
    1   may         mon      261        1   999        0          1.1
    3   may         mon      226        1   999        0          1.1
    4   may         mon      151        1   999        0          1.1
    5   may         mon      307        1   999        0          1.1
    7   may         mon      139        1   999        0          1.1
      cons.price.idx cons.conf.idx euribor3m nr.employed  y
    1         93.994         -36.4     4.857        5191 no
    3         93.994         -36.4     4.857        5191 no
    4         93.994         -36.4     4.857        5191 no
    5         93.994         -36.4     4.857        5191 no
    7         93.994         -36.4     4.857        5191 no
    > x<-list(a=1:10,beta=exp(-3:3),logic=c(TRUE,FALSE,FALSE,TRUE))
    > x
    $a
     [1]  1  2  3  4  5  6  7  8  9 10

    $beta
    [1]  0.04978707  0.13533528  0.36787944  1.00000000  2.71828183  7.38905610
    [7] 20.08553692

    $logic
    [1]  TRUE FALSE FALSE  TRUE

    > probs<-c(1:3/4)
    > rt.value<-c(0,0,0)
    > vapply(x, quantile, FUN.VALUE = rt.value, probs=probs)
           a      beta logic
    25% 3.25 0.2516074   0.0
    50% 5.50 1.0000000   0.5
    75% 7.75 5.0536690   1.0
    > probs<-c(1:4/4)
    > vapply(x, quantile, FUN.VALUE = rt.value, probs=probs)
    Error in vapply(x, quantile, FUN.VALUE = rt.value, probs = probs) : 
      值的长度必需为3,
     但FUN(X[[1]])结果的长度却是4
    > rt.value<-c(0,0,0,0)
    > vapply(x, quantile, FUN.VALUE = rt.value, probs=probs)
             a       beta logic
    25%   3.25  0.2516074   0.0
    50%   5.50  1.0000000   0.5
    75%   7.75  5.0536690   1.0
    100% 10.00 20.0855369   1.0
    > rt.value<-c(0,0,0,"")
    > vapply(x, quantile, FUN.VALUE = rt.value, probs=probs)
    Error in vapply(x, quantile, FUN.VALUE = rt.value, probs = probs) : 
      值的种类必需是'character',
     但FUN(X[[1]])结果的种类却是'double'

    展开全文
  • R语言 清洗数据

    千次阅读 2020-04-10 23:39:03
    清洗数据是指对数据进行重新审查和校验的过程,目的在于删除重复信息,纠正存在的错误,并提供数据一致性。 处理缺失值 R提供了一些函数,用于缺失值检测和缺失值处理: 函数 描述 is.na(x) 返回一个与x等...

    清洗数据是指对数据进行重新审查和校验的过程,目的在于删除重复信息,纠正存在的错误,并提供数据一致性。


    处理缺失值

    R提供了一些函数,用于缺失值检测缺失值处理

    函数描述
    is.na(x)返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。TRUE表示该位置的元素是缺失值
    anyNA(x,recursive = FALSE)判断数据中是否存在缺失值,返回TRUE或FALSE值。若存在缺失值则返回FALSE
    na.omit(x)删除含有缺失值的观测
    complete.cases(x)返回一个逻辑向量,不存在缺失值的行的值为TRUE,存在缺失值的行的值为FALSE

    示例:

    score <- data.frame(student = c("A","B","C","D"),
                         gender = c("M","M","F","F"),
                           math = c(90,70,80,60),
                            Eng = c(88,78,69,98),
                             p1 = c(66,59,NA,88))         #  创建数据框
    anyNA(score)   #  判断score中是否存在缺失值,返回TRUE或FALSE值。若存在缺失值则返回FALSE
    #  运行结果:
    #  [1] TRUE
    is.na(score)
    #  运行结果:
    #       student gender  math   Eng    p1
    #  [1,]   FALSE  FALSE FALSE FALSE FALSE
    #  [2,]   FALSE  FALSE FALSE FALSE FALSE
    #  [3,]   FALSE  FALSE FALSE FALSE  TRUE
    #  [4,]   FALSE  FALSE FALSE FALSE FALSE
    complete.cases(x)
    #  运行结果:
    #  [1]  TRUE  TRUE FALSE  TRUE
    score[complete.cases(score),]
    #  运行结果:
    #    student gender math Eng p1
    #  1       A      M   90  88 66
    #  2       B      M   70  78 59
    #  4       D      F   60  98 88
    na.omit(score)
    #  运行结果:
    #    student gender math Eng p1
    #  1       A      M   90  88 66
    #  2       B      M   70  78 59
    #  4       D      F   60  98 88
    
    


    处理日期变量

    示例:

    Sys.Date()
    #  运行结果:
    #  [1] “2020-04-09”
    Sys.time()
    #  运行结果:
    #  [1] “2020-04-09 09:29:32 CST”
    date()
    #  运行结果:
    #  [1] “Wed Mar 25 09:30:01 2020”
    
    

    读入日期的格式

    符号含义示例
    %d数字表示的日期(00~31)01~31
    %a缩写的星期名Mon
    %A非缩写的星期名Monday
    %w数字表示的星期天数0-6,周日为0
    %m数字表示的月份(00~12)00~12
    %b缩写的月份Jan
    %B非缩写的月份January
    %y二位数的年份20
    %Y四位数的年份2020
    %H24小时制00-23
    %I12小时制01-12
    %pAM/PM指示AM/PM
    %M十进制的分数00-60
    %S十进制的秒00-60

    as.Date函数

    as.Date函数可以将字符串形式的日期值转换为日期变量

    参数描述
    x要转换的对象,为字符型数据
    format用于读入日期的适当格式

    as.Date函数只能转换包含年月日星期的字符串,无法转换具体到时间的字符串

    as.POSIXIt函数   as.POSIXIt(x,tz="",format)

    参数描述
    x想要转换的字符串型日期时间值
    tz指定转换后的时区
    format指定要转换的日期值的格式

    strptime函数   strptime(x,format,tz="")

    参数描述
    x字符型数据
    format指定要转换的日期值的格式
    tz指定时区

    strftime函数   strftime(x,format="")

    #  转化日期时间变量为字符串
    #  使用上例的结果
    x
    #  运行结果:
    #  [1] "2020-02-28 10:07:52 CST" "2020-08-07 19:33:02 CST"
    #  输出的格式转换为format指定的格式
    strftime(x,format = "%Y/%m/%d")
    #  运行结果:
    #  [1] "2020/02/28" "2020/08/07"
    
    

    注意:strftime函数的与strptime函数相对应,strftime函数用于将时间变量按指定的格式转换为字符型日期值

    format函数   format(x,…)

    #  使用format()函数转换为字符串
    #  使用和上例的同样的数据
    x
    #  运行结果:
    #  [1] "2020-02-28 10:07:52 CST" "2020-08-07 19:33:02 CST"
    #  输出的格式转换为format定义的格式
    format(x,"%d/%m/%Y")
    #  运行结果:
    #  [1] ”28/02/2020“ ”07/08/2020“
    
    

    注意:format函数不仅限于将日期变量按格式转化为字符串,也可以将其他类型的变量转化为字符串



    数据排序

    R中涉及排序的基本函数有sort、rank和order函数。其基本用法为:

    • sort(x,na.last = NA, decreasing = FALSE, …)
    • order(…, na.last = TRUE, decreasing = FALSE)
    • rank(x, na.last = TRUE, ties.method = c(“average”,“first”,“random”,“max”,“min”))

    x表示需要排序的数据,decreasing表示是否按降序排序数据,method表示所使用的排序算法,na.last用来说明如何处理NA值,如果为FALSE,则会删除这些值,如果为TRUE,就会把这些值放到最后

    sort函数:对向量进行排序,返回的结果是经过排序后的向量

    参数描述
    x表示需要排序的数据集
    na.last设定对数据集中缺失值的处理,na.last=NA(默认)表示在排序结果中缺失值将被删除。na.last=TRUE表示将数据缺失值放在最后,na.last=FALSE表示j将数据缺失值放在前面
    decreasingdecreasing = FALSE表示按从小到大的顺序进行排序,
    decreasing = TRUE表示按从大到小的顺序排序

    rank函数:对向量进行排序,返回的结果是经过排序后的秩次
    rank(x,na.last=TRUE,ties.method=c(“average”,“first”,“random”,“max”,“min”))

    参数描述
    x表示需要排序的数据集
    na.last设定对数据集中缺失值的处理,na.last=NA(默认)表示在排序结果中缺失值将被删除。na.last=TRUE表示将数据缺失值放在最后,na.last=FALSE表示j将数据缺失值放在前面
    ties.methodties.method用于设定对数据集中重复数据的秩的处理方式,
    ties.method = "average"表示对重复数据的秩取平均值作为这几个数据共同的秩,
    ties.method = "first"表示重复数据中的位于前面的数据的秩取小,位于后面的依次递增,
    ties.method = "random"表示随机定义重复数据的秩,
    ties.method = "max"表示以重复数据可能对应的最大秩作为这几个数据共同的秩,
    ties.method = "min"表示以重复数据可能对应的最小秩作为这几个数据共同的秩

    order函数

    • order函数的功能为对数据进行排序,返回值为最小(大)值、次小(大)值…次大(小)值、最大(小)值所在的位置
    • order(x,na.last=TRUE,decreasing=FALSE)
    • x和na.last参数含义同sort函数
    • 与前面两个排序函数不同的是,order函数可以对数据框进行排序
    • 其中对数据集data.frame按变量v1,v2进行排序的实现形式为:
      data.frame[order(data.frame $ v1, data.frame $ v2)]
    • 若v1一样,则按v2升序排序,如果要将升序改为降序,只需在变量前添加符号或decreasing = TRUE


    合并数据集

    数据框的编辑可以通过rbind和cbind函数。需要注意的是,使用rbind和cbind函数对于数据框而言,分别为增加新的样本数据和增加新属性变量。
    rbind的自变量的宽度(列数)应该与原数据框的宽度相等,cbind的自变量的高度(行数)应该与原数据框的高度相等。

    展开全文
  • R语言——数据清洗

    2020-12-15 21:22:30
    R语言对空值的处理数据准备和模式设定删除记录删除变量用均值/中位数/众数进行插补预测法 数据准备和模式设定 本文所涉及到的几种数据缺失值处理方法都是使用mlbench包中的BostonHousing数据集作为演示数据。由于...

    引文原地址

    copy原文章,是为了防止原文章被删除

    数据准备和模式设定

    本文所涉及到的几种数据缺失值处理方法都是使用mlbench包中的BostonHousing数据集作为演示数据。由于BostonHousing数据集没有缺失值,为了演示需要,在数据集中随机插入缺失值。通过这种方法,我们不仅可以评估由数据缺失带来的精度损失,也可以比较不同处理方式的效果好坏。

    # 初始化数据
    	# install.packages('mlbench')
    	library(mlbench)
    	data ("BostonHousing", package="mlbench")
    	original <- BostonHousing
    	
    	# 填充缺失值
    	set.seed(100)
    	BostonHousing[sample(1:nrow(BostonHousing), 40), "rad"] <- NA
    	BostonHousing[sample(1:nrow(BostonHousing), 40), "ptratio"] <- NA
    

    在插入缺失值之后,我们可以使用mice包中md.pattern函数查看缺失值的“数据模式”

    # 缺失值的模式
    	library(mice)
    	md.pattern(BostonHousing)
    	
    	    crim zn indus chas nox rm age dis tax ptratio b lstat medv rad   
    	466    1  1     1    1   1  1   1   1   1       1 1     1    1   1  0
    	 40    1  1     1    1   1  1   1   1   1       1 1     1    1   0  1
    	       0  0     0    0   0  0   0   0   0       0 0     0    0  40 40
    

    删除记录

    如果训练数据集包含有大量的观测值,那么你可以尝试删除包含缺失值的观测行(或者是在构建模型的时候不包含缺失值,例如设置na.action=na.omit)。在删除含有缺失值的观测行之前请确保满足以下两个条件:

    有足够样本点
    不会引入偏差
      举例如下:

    lm(medv ~ ptratio + rad, data=BostonHousing, na.action=na.omit)
    

    删除变量

    如果数据集中的某个特定变量包含许多的缺失值,并且通过删除这个特定变量你可以保留许多的观测值。除非该变量是一个非常重要的预测指标,否则我建议你删除它。应用这个方法需要我们在变量的重要性和观测的数量之间做权衡。

    用均值/中位数/众数进行插补

    处理缺失值数据的一种简单粗暴方法是插补均值、中位数或者众数。在具体环境下,如果该自变量对因变量的影响比较小,那么这种粗略的估计是可以接受的,并且有可能会产生令人满意的结果。

    举例如下:

    library(Hmisc)
    	impute(BostonHousing$ptratio, mean)  # 插补均值
    	impute(BostonHousing$ptratio, median)  # 插补中位数
    	impute(BostonHousing$ptratio, 20)  # 填充特定值
    	
    	# 手动插值
    	BostonHousing$ptratio[is.na(BostonHousing$ptratio)] <- mean(BostonHousing$ptratio, na.rm = T) 
    

    下面通过均值来插补缺失值,并计算准确度。

    library(DMwR)
    	actuals <- original$ptratio[is.na(BostonHousing$ptratio)]
    	predicteds <- rep(mean(BostonHousing$ptratio, na.rm=T), length(actuals))
    	regr.eval(actuals, predicteds)
    	# >       mae        mse       rmse       mape 
    	# >  1.65000000 3.91387214 1.97835086 0.09577013 
    

    预测法

    用预测值来处理缺失值的一种高级的方法,主要包括:KNN插值,rpart包,mice包

    5.1 kNN插值法
      DMwR包中的knnImputation函数使用k近邻方法来填充缺失值。具体过程如下:对于需要插值的记录,基于欧氏距离计算k个和它最近的观测。接着将这k个近邻的数据利用距离逆加权算出填充值,最后用该值替代缺失值。

    该方法的优点是只需调用一次函数就能对所有缺失值进行填充。该函数的参数是除了响应变量之外所有变量组成的数据框。这是因为你无法对未知的响应变量进行插值。

    library(DMwR)
    	knnOutput <- knnImputation(BostonHousing[, !names(BostonHousing) %in% "medv"])  # 使用KNN插值.
    	anyNA(knnOutput)
    	#> FALSE
    

    检查精度

    actuals <- original$ptratio[is.na(BostonHousing$ptratio)]
    	predicteds <- knnOutput[is.na(BostonHousing$ptratio), "ptratio"]
    	regr.eval(actuals, predicteds)
    	#>       mae        mse       rmse       mape 
    	#>  0.90718277 1.77887569 1.33374499 0.05469914 
    

    与均值插值法相比,mape的值降低了42.8个百分点。

    5.2 rpart
      knn插值法的缺点是对因子类变量的插补效果不好。rpart包和mice包提供了更灵活的解决方案。rpart的优点是只需一个未缺失值就可以填充整个数据样本。

    对因子变量而言,rpart函数式可以把method设为class(分类树)。数值型变量就设定method=anova(回归树)。当然,我们也要剔除响应变量。

    library(rpart)
    	class_mod <- rpart(rad ~ . - medv, data=BostonHousing[!is.na(BostonHousing$rad), ], method="class", na.action=na.omit)  # rad变量是因子型变量
    	anova_mod <- rpart(ptratio ~ . - medv, data=BostonHousing[!is.na(BostonHousing$ptratio), ], method="anova", na.action=na.omit)  # ptratio是数值型变量
    	rad_pred <- predict(class_mod, BostonHousing[is.na(BostonHousing$rad), ])
    	ptratio_pred <- predict(anova_mod, BostonHousing[is.na(BostonHousing$ptratio), ])
    

    ptratio的插补精度

    actuals <- original$ptratio[is.na(BostonHousing$ptratio)]
    	predicteds <- ptratio_pred
    	regr.eval(actuals, predicteds)
    	#>       mae        mse       rmse       mape 
    	#>0.61655453 0.74165850 0.86119597 0.03643275 
    

    与knn插值法相比,mape值又额外下降了33.3%。好极了。

    rad的插补精度

    actuals <- original$rad[is.na(BostonHousing$rad)]
    	predicteds <- as.numeric(colnames(rad_pred)[apply(rad_pred, 1, which.max)])
    	mean(actuals != predicteds)  # 计算误分类比率
    	#> 0.2179487
    

    仅有21.7%的缺失值被误分类,这个结果也不坏。

    5.3 mice
      mice是链式方程多元插值的简写(Multivariate Imputation by Chained Equations)。mice包提供了多种先进的缺失值处理方法。它使用一种不同寻常的方法来进行两步插值:首先利用mice函数建模再用complete函数生成完整数据。mice(df)会返回df的多个完整副本,每个副本都对缺失的数据插补了不同的值。complete()函数则会返回这些数据集中的一个(默认)或多个。下面演示用该方法如何对rad和ptratio这两个变量进行插值:

    library(mice)
    	miceMod <- mice(BostonHousing[, !names(BostonHousing) %in% "medv"], method="rf")  # 基于随机森林模型进行mice插值
    	miceOutput <- complete(miceMod)  # 生成完整数据
    	anyNA(miceOutput)
    	#> FALSE
    

    计算ptratio的插值精度:

    actuals <- original$ptratio[is.na(BostonHousing$ptratio)]
    	predicteds <- miceOutput[is.na(BostonHousing$ptratio), "ptratio"]
    	regr.eval(actuals, predicteds)
    	#>       mae        mse       rmse       mape 
    	#> 0.31000000 0.62950000 0.79341036 0.01984801 
    

    mape值与rpart相比提升了45.8个百分点。

    rad的插补精度:

    actuals <- original$rad[is.na(BostonHousing$rad)]
    	predicteds <- miceOutput[is.na(BostonHousing$rad), "rad"]
    	mean(actuals != predicteds)  # compute misclass error.
    	#>  0.3076923
    

    误分类比率为30%,也就是说40个缺失观测里插补错误的只有12个。相对rpart方法的错误率(25%)来说,有点稍微的下降。

    如果你想更深入的了解,可以查看mice包的手册和DataScience+网站上的另一篇文章。

    尽管通过本文你已经对各类处理方法有了初步了解,但这还不足以帮助你判断每种方法的优劣。当你下次处理缺失值的时候,这些方法是值得一试的。

    展开全文
  • 数据清洗与准备 环境配置 library(mlbench) # 将会使用到包中的BostonHousing数据集 library(funModeling) # 探索性数据分析工具包,本节内容中将会使用到它的status()函数,打印整体数据质量 library(tidyverse) # ...
  • 详细内容为 《R语言游戏数据分析与挖掘》第五章学习笔记之数据清洗 setwd('H:\\程志伟\\R语言游戏数据分析与挖掘\\Game_DataMining_With_R-master\\data\\第5章\\') > ##### 5.2 数据清洗 #### > # 5.2.1 ...
  • 详细内容为 《R语言游戏数据分析与挖掘》第五章学习笔记之数据清洗 5.3.1 数据转换 5.2.2 哑变量处理 # 产生衍生变量 > rawdata <- read.csv("数据转换数据.csv",na.strings = NA) > # 查看数据的前六行...
  • 数据清洗是完成一篇生信文章最基本但也是最终要的准备工作,如果不会数据清洗,就要错过很多优质数据集,那文章的质量就会大打折扣~当然这一步也是最费时间费脑子的。话不多说,我们进入正题。我们熟知的生信分析中...
  • 作者简介Introduction杜雨:EasyCharts团队成员,R语言中文社区专栏作者。...往期回顾R语言数据清洗实战——世界濒危遗产地数据爬取案例往期案例数据请移步本人GitHub:https://github.com/ljtyduyu/Data
  • 1.利用which()函数剔除某些行或列 data1=data1[-which(((data1$TotalScore)/96)<0.2),] ...2.利用aggregate()函数进行数据初步整理(求和,求均值等) data1.sum=aggregate(Score~Name+Va...
  • 作者:James D. Miller;翻译:王雨桐;校对:万文菁本文约5300字,建议阅读10+分钟。本文将介绍数据清洗过程的主要步骤,并通过案例和代码演示如何利用R语言...
  • 住院号 姓名 等唯一值变量的检查与筛选 重复值所在的行 使用本地数据 鸢尾花(yuān wěi huā)做示例 #加载内置数据 data(iris) data=iris #因为iris这里没有唯一的ID,像姓名,住院号no.. #手动生成一个 no,代表...
  • R语言——数据清洗之缺失值处理

    千次阅读 多人点赞 2020-10-13 16:29:51
    数据清洗之缺失值——R语言 缺失值处理步骤: 1)识别缺失数据; 2)检查导致数据缺失的原因; 3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值 缺失值数据的分类: 1)完全随机缺失:若某变量的缺失数据...
  • 但丁香园的数据存在地名不规范的问题,以及省、市、县三级行政区划并存的问题,不进行清洗不便做图。 底图制备 一张合适的底图是制作地图的基础。与行政区划相关的底图,最权威的数据源当然是从自然资源部的数据中心...
  • R语言数据清洗与规整-回归模型为例

    千次阅读 2017-07-10 20:29:45
    数据清洗和规整是进行数据分析的前提条件,数据的清洗和规整通常会花费比进行数据分析更多的时间,正所谓“清洗一小时,分析五秒钟”。 数据清洗和规整要依据实际数据的特征进行,其包括缺失值和冗余值的处理、...
  • 在大数据分析R语言tidyverse数据清洗工具教程中,我们将研究如何使用R和一些漂亮的tidyverse工具来做到这一点。  该tidyverse工具提供了强大的方法来诊断和清理杂乱的数据集,R.虽然有更为我们可以用tidyverse做,...
  • R软件如何编一个函数用于处理一个数据框,用于删除所有缺失值比例>50%的列,求大神教教,实在绞尽脑汁想不出来。
  • R语言数据清洗、整理的方法

    万次阅读 多人点赞 2015-10-08 19:59:22
    R语言数据清理(详细教程) 数据的清理 如同列夫托尔斯泰所说的那样:“幸福的家庭都是相似的,不幸的家庭各有各的不幸”,糟糕的恶心的数据各有各的糟糕之处,好的数据集都是相似的。一...
  • 基本操作(包括读取数据) 设置工作目录 setwd(‘D://R/’) 读取数据文件 listing<-read.csv(‘listings.csv’,header = T,sep = ‘,’,quote = ‘’) listings<-na.omit(listing) # 去除所有含缺失值的行 ...
  • R-数据清洗(附代码,图片)

    千次阅读 2018-12-13 10:11:03
    数据清洗是将原始的数据进行整理和规范,以达到数据分析人员使用要求的数据。这个过程很重要,也很花费时间。现将当前学到的方式总结,欢迎大家互相交流。 1.缺失值处理 在R中,当原始数据中存在缺失值时,该缺失...
  • 利用R进行脏数据清洗

    千次阅读 2018-05-29 21:40:26
    本篇博客参照了如何使用R语言解决可恶的脏数据一文,进行了模拟脏数据清洗。 一、缺失值 缺失值的处理要依据数据的类型和其内容进行相应处理,常用的方法有行删除、众数替代、均值替代以及多重插补法等等。 以下...
  • 第2章讲解了R语言RStudio的安装及使用方法,并对数据对象和数据导入进行了介绍;第3章介绍了R语言绘图基础,包括常用图形参数设置、低级绘图函数和高级绘图函数;第4章介绍了lattice和ggplot2绘图包,并详细介绍了...
  • r语言错误记录 面板数据整理清洗疑点 第一个问题,重复id识别 面板数据整理好后可以通过面板数据框进行整理,看看是否是平衡数据 a <- table(data1$id) summary(a) all(a==16) which(a!=16) delect_ids<-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,558
精华内容 3,823
关键字:

r语言数据清洗