美文网首页R语言学习笔记
《R语言实战》学习笔记---Chapter4(3) 基础数据管理

《R语言实战》学习笔记---Chapter4(3) 基础数据管理

作者: RSP小白之路 | 来源:发表于2023-08-10 08:19 被阅读0次

    在任何项目中,数据缺失问题都是不可避免的。因此对缺失值进行合理的处理是数据处理过程中很重要的一环。
    在R中,缺失值以符号NA(Not Available,不可用)表示,且数值型字符型使用的缺失值符号都是相同的。

    识别缺失值

    R提供了一些函数, 用于识别包含缺失值的观测。 函数is.na()允许你检测缺失值是否存在。

    y <- c(1 , 2,3, NA)
    is.na(y)
    [1] FALSE FALSE FALSE  TRUE
    

    可以看到is.na()函数作用于一个对象上。返回一个和原来数据长度相同的对象,元素是逻辑值
    原对象某个元素为缺失值,则返回的对象对应位置是TRUE,不缺失的位置是FALSE

    依然以第4章开始的管理者信息数据为例,查看is.na()函数的作用。

    manager <- c(1, 2, 3, 4, 5)
    date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08", "5/1/09")
    country <- c("US", "US", "UK", "UK", "UK")
    gender <- c("M", "F", "F", "M", "F")
    age <- c(32, 45, 25, 39, 99)
    q1 <- c(5, 3, 3, 3, 2)
    q2 <- c(4, 5, 5, 3, 2)
    q3 <- c(5, 2, 5, 4, 1)
    q4 <- c(5, 5, 5, NA, 2)
    q5 <- c(5, 5, 2, NA, 1)
    leadership <- data.frame(manager, date, country, gender, age,
    q1, q2, q3, q4, q5, stringsAsFactors=FALSE)
    print(leadership )
      manager     date country gender age q1 q2 q3 q4 q5
    1       1 10/24/08      US      M  32  5  4  5  5  5
    2       2 10/28/08      US      F  45  3  5  2  5  5
    3       3  10/1/08      UK      F  25  3  5  5  5  2
    4       4 10/12/08      UK      M  39  3  3  4 NA NA
    5       5   5/1/09      UK      F  99  2  2  1  2  1
    is.na(leadership[, 6:10])
            q1    q2    q3    q4    q5
    [1,] FALSE FALSE FALSE FALSE FALSE
    [2,] FALSE FALSE FALSE FALSE FALSE
    [3,] FALSE FALSE FALSE FALSE FALSE
    [4,] FALSE FALSE FALSE  TRUE  TRUE
    [5,] FALSE FALSE FALSE FALSE FALSE
    

    书中重要的注意点:

    第一, 缺失值被认为是不可比较的, 即便是与缺失值自身的比较。 这意味着无法使用比较运算符来检测缺失值是否存在。 例如, 逻辑测试myvar == NA的结果永远不会为TRUE 。 可以看到缺失值相应位置是TRUE
    第二, R 并不把无限的或者不可能出现的数值标记成缺失值。正无穷和负无穷分别用Inf-Inf所标记。 因此5/0返回 Inf 。 不可能的值(比如说, sin(Inf)) 用NaN符号来标记(not a number, 不是一个数) 。若要识别这些数值, 你需要用到is.infinite()is.nan()


    重编码值为缺失值

    如之前的例子中的年龄大于等于99岁的,在分析前需要被编码为缺失值。在分析这一数据集之前,需要编码这些值为缺失值。

    leadership$age[leadership$age == 99]  <- NA
    

    排除缺失值

    确定了缺失值的位置后,需要删除缺失值。
    原因是, 含有缺失值的算术表达式和函数的计算结果也是缺失值。

    x <- c(1, 3, NA, 7)
    y <- x[1] + x[2] + x[3] + x[4]
    z <- sum(x)
    
    > print(y)
    [1] NA
    > print(z)
    [1] NA
    
    • 使用na.rm = TRUE选项去除函数

    R中多数数值函数都拥有一个na.rm = TRUE的选项,可以在计算之前移除缺失值并使用剩余值进行计算:

    x <- c(1, 3, NA, 7)
    z <- sum(x, na.rm = TRUE)
    > print(z)
    [1] 11
    
    • 使用na.omit()删除所有含有缺失数的行/观测
    > print(leadership)
      manager     date country gender age q1 q2 q3 q4 q5
    1       1 10/24/08      US      M  32  5  4  5  5  5
    2       2 10/28/08      US      F  45  3  5  2  5  5
    3       3  10/1/08      UK      F  25  3  5  5  5  2
    4       4 10/12/08      UK      M  39  3  3  4 NA NA
    5       5   5/1/09      UK      F  NA  2  2  1  2  1
    
    newdata <- na.omit(leadership)
    > print(newdata)
      manager     date country gender age q1 q2 q3 q4 q5
    1       1 10/24/08      US      M  32  5  4  5  5  5
    2       2 10/28/08      US      F  45  3  5  2  5  5
    3       3  10/1/08      UK      F  25  3  5  5  5  2
    

    可以看到包含缺失值的2行观测都已经被去除了。

    这种粗暴的处理方式只适用于缺失值较少且集中于少量观测中,更复杂的处理方式第18章再学习。

    相关文章

      网友评论

        本文标题:《R语言实战》学习笔记---Chapter4(3) 基础数据管理

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