专栏首页庄闪闪的R语言手册R数据科学|5.4内容介绍及习题解答

R数据科学|5.4内容介绍及习题解答

5.4 缺失值

处理异常值有2种方法:

1.将带有可疑值的行全部丢弃

diamonds2 <- diamonds %>%  
  filter(between(y, 3, 20))  

我们不建议使用这种方式,因为一个无效测量不代表所有测量都是无效的。此外,如果数据质量不高,若对每个变量都采取这种做法,那么你最后可能会发现数据已经所剩无几!

2. 缺失值代替

最简单的做法就是使用mutate()函数创建一个新变量来代替原来的变量。你可以使用ifelse()函数将异常值替换为 NA:

diamonds2 <- diamonds %>%  
  mutate(y = ifelse(y < 3 | y > 20, NA, y))  

上面ifelse()函数含义为:如果y小于3或y大于20,则y=NA,反之,y还是为原来值。

注意:和 R 一样,ggplot2也遵循不能无视缺失值的原则。因为无法明确地绘制出缺失值,所以ggplot2 在绘图时会忽略缺失值,但会提出警告以通知缺失值被丢弃了:

ggplot(data = diamonds2, mapping = aes(x = x, y = y)) +  
  geom_point()  
#> Warning: Removed 9 rows containing missing values  
#> (geom_point).  

要想不显示这条警告,可以在geom_point()中设置na.rm = TRUE

比较有无缺失值的区别

有时你会想弄清楚造成有缺失值的观测和没有缺失值的观测间的区别的原因。例如,在nycflights13::flights中,dep_time 变量中的缺失值表示航班取消了。因此,你应该比较一下已取消航班和未取消航班的计划出发时间。可以使用 is.na() 函数创建一个新变量来完成这个操作:

nycflights13::flights %>%  
  mutate(  
     cancelled = is.na(dep_time),  
     sched_hour = sched_dep_time %/% 100,  
     sched_min = sched_dep_time %% 100,  
     sched_dep_time = sched_hour + sched_min / 60  
 ) %>%  
ggplot(mapping = aes(sched_dep_time)) +  
  geom_freqpoly(  
    mapping = aes(color = cancelled),  
    binwidth = 1/4  
 )  

5.4 习题解答

该节的作业习题较少,就直接在内容后面附上了。

问题一

直方图如何处理缺失值?条形图如何处理缺失值?为什么会有这种区别?

解答

  • 直方图:当计算每个箱中的观察数时,丢失的值被删除。请参阅警告信息。在直方图中x需要是数值型的,stat_bin()按范围将观察结果分组到各个箱中。由于NA观测值的数值是未知的,它们不能被放置在特定的容器中,因此被丢弃。
diamonds2 <- diamonds %>%  
  mutate(y = ifelse(y < 3 | y > 20, NA, y))  
  
ggplot(diamonds2, aes(x = y)) +  
  geom_histogram()  
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.  
#> Warning: Removed 9 rows containing non-finite values (stat_bin).  
  • 条形图:在geom_bar()函数中NA被视为单独一类的数据,此函数要求x是一个离散的(分类的)变量,缺失的值类似于另一个类别。
diamonds %>%  
  mutate(cut = if_else(runif(n()) < 0.1, NA_character_, as.character(cut))) %>%  
  ggplot() +  
  geom_bar(mapping = aes(x = cut))  

问题二

na.rm = TRUEmean()sum()函数中的作用是什么?

解答

该命令在计算平均值和总和之前从原数据中删除NA值。

mean(c(0, 1, 2, NA), na.rm = TRUE)  
#> [1] 1  
sum(c(0, 1, 2, NA), na.rm = TRUE)  
#> [1] 3  

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:我才是赵西西

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R数据科学|3.4内容介绍及习题解答

    通过基于变量名的操作,select()函数可以让你生成一个有用的变量子集。基本用法如下:

    庄闪闪
  • R数据科学|3.7内容介绍及习题解答

    虽然与summarize()函数结合起来使用是最有效的,但分组也可以与mutate()和filter()函数结合,以完成非常便捷的操作。示例如下:

    庄闪闪
  • R数据科学|3.5内容介绍及习题解答

    上节我们对选择现有的列进行了介绍与习题解答,现在对数据框添加新列进行介绍,这里使用mutate()函数,注意:mutate()总是将新列添加在数据集的最后。

    庄闪闪
  • R数据科学|5.5.2内容介绍及课后习题解答

    要想对两个分类变量间的相关变动进行可视化表示,需要计算出每个变量组合中的观测数量。常用的两种方法有:

    庄闪闪
  • R数据科学|5.5.3内容介绍

    最简单的一种方法是:使用geom_point()画出散点图。你可以将相关变动看作点的模式。例如,你可以看到钻石的克拉数和价值之间存在一种指数关系:

    庄闪闪
  • R数据科学|3.6内容介绍

    上节我们对选择现有的列和使用mutate添加新列做了介绍。现在对数据框使用summarize()进行分组摘要进行介绍。函数功能:summarize()可以将数据...

    庄闪闪
  • R数据科学|5.5.1 内容介绍

    如果变动描述的是一个变量内部的行为,那么相关变动描述的就是多个变量之间的行为。相关变动是两个或多个变量以相关的方式共同变化所表现出的趋势。查看相关变动的最好 方...

    庄闪闪
  • R数据科学|5.3内容介绍

    上一期我们对《R数据科学》第3.7节进行了内容介绍和习题解答,细心的读者可以发现,这里直接跳转到了5.3节了。原因在于中间各节内容干货较少,也没有习题,所以就跳...

    庄闪闪
  • R数据科学|第十一章内容介绍

    因子在 R 中用于处理分类变量。从历史上看,因子远比字符串更容易处理。因此,R 基础包中的很多函数都自动将字符串转换为因子。

    庄闪闪
  • R数据科学|第九章内容介绍

    在实际应用中,我们常会涉及到多个数据表,必须综合使用它们才能找到关键信息。存在于多个表中的这种数据统称为关系数据。本章中的很多概念都和SQL中的相似,只是在dp...

    庄闪闪
  • R数据科学|第七章内容介绍

    tibble是一种简单数据框,它对data.frame的功能进行了一些修改,更易于使用。本文将介绍tidyverse的核心R包之一——tibble包

    庄闪闪
  • R数据科学|第十章内容介绍

    可以使用str_sub()函数来提取字符串的一部分。除了字符串参数外,str_sub() 函数中还 有 start 和 end 参数,它们给出了子串的位置(包括...

    庄闪闪
  • R数据科学|第八章内容介绍

    本文将介绍如何使用readr包将平面文件加载到 R 中,readr 也是 tidyverse 的核心 R包之一。

    庄闪闪
  • R数据科学|3.6习题解答

    这个问题是数据分析的一个基本问题:成本函数。作为分析人员,我们之所以对航班延误感兴趣,是因为对乘客来说代价高昂。在许多情况下,到达延迟更重要。在大多数情况下,迟...

    庄闪闪
  • R数据科学|5.5.1 习题解答

    前面对比了已取消航班和未取消航班的出发时间,使用学习到的知识对这个对比的可视化结果进行改善。

    庄闪闪
  • R数据科学|5.3课后习题解答

    研究 x、y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条钻石数据,如何确定表示长、宽和高的变量?

    庄闪闪
  • (数据科学学习手札41)folium基础内容介绍

      folium是js上著名的地理信息可视化库leaflet.js为Python提供的接口,通过它,我们可以通过在Python端编写代码操纵数据,来调用leaf...

    Feffery
  • (数据科学学习手札42)folium进阶内容介绍

      在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就...

    Feffery
  • (数据科学学习手札43)Plotly基础内容介绍

      Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图,本文就将...

    Feffery

扫码关注云+社区

领取腾讯云代金券