美文网首页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章再学习。

相关文章

  • 学习小组Day4笔记--行

    正式开始学习R语言了,今天笔记内容为R语言基础和ggplot2的入门学习 R语言基础 1、认识R与RStudio ...

  • R语言常用函数整理(基础篇)

    R语言基础函数整理 R语言常用函数整理本篇是基础篇,即R语言自带的函数。 一、数据管理 vector:向量nume...

  • R语言-0基础学习4-实战1-常见操作

    R语言学习系列R语言-0基础学习1-数据结构R语言-0基础学习2-构建子集R语言-0基础学习3-循环排序信息处理函...

  • R 语言实战 读书笔记

    R语言实战(第2版) 学习笔记 1. R语言介绍 1.1 为什么用R语言 bla 1.2 基本操作 图表演示命令 ...

  • 数据分析(一): 《R语言实战》

    2016.12.31~2017.01.01开始学习R语言 计划利用元旦3天假期学完《R语言实战》1~7章粗略学习...

  • 第1章 R语言介绍

    《R语言实战》笔记系列 本章学习大纲 1.R的安装 2.R的基本概念(常用的函数介绍) 3.R的常见错误 第一部分...

  • 学习小组笔记Day4-Jocelyn

    2020年7月6日学习笔记 R语言基础 一、准备工作 下载R语言: https://mirrors.tuna.ts...

  • 第2章 创建数据集

    《R语言实战》笔记系列 本章学习大纲 1.R的数据结构 2.输入数据 3.导入数据 4.标注数据 第一部分 R的数...

  • R语言基础--数据类型-总结

    R语言基础--数据类型-总结 1、R语言基础--数据类型之向量 2、R语言基础--数据类型之因子 3、R语言基础-...

  • [R语言]Chapter 4 基本数据管理

    Chapter4 基本数据管理 这是我对基本数据管理部分的笔记,总的来说,能够ren 一个示例创建leadersh...

网友评论

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

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