←
PDF 194 / 520 Exercises
→
English · PDF 194
Original PDF page 194
中文 · PDF 194

我之前是一段一段地给你展示代码的,把每个中间结果赋值给一个新变量。这通常不是你交互式工作时的做法。相反,你会逐步构建一个复杂的管道:

who %>% gather(code, value, new_sp_m014:newrel_f65, na.rm = TRUE) %>% mutate( code = stringr::str_replace(code, "newrel", "new_rel") ) %>% separate(code, c("new", "var", "sexage")) %>% select(-new, -iso2, -iso3) %>% separate(sexage, c("sex", "age"), sep = 1)

练习

    1. 在本案例研究中,我设置 na.rm = TRUE 只是为了更容易检查我们是否得到了正确的值。这样做合理吗?想一想这个数据集中缺失值是如何表示的。是否存在隐式缺失值?NA 和零之间有什么区别?
    1. 如果省略 mutate() 这一步会发生什么?(mutate(key = stringr::str_replace(key, "newrel", "new_rel")))。
    1. 我曾声称 iso2 和 iso3 与 country 是冗余的。请验证这一说法。
    1. 对每个国家、年份和性别,计算结核病病例的总数。并对数据做一个有信息量的可视化。

非整洁数据

在继续讨论其他主题之前,值得简要谈谈非整洁数据。在本章前面,我用带有贬义的“混乱”一词来指代非整洁数据。这是一种过于简化的说法:有许多有用且有充分依据的数据结构并不是整洁数据。使用其他数据结构主要有两个原因:

  • 替代的表示方式可能在性能或存储空间上有显著优势。
  • 一些专业领域已经形成了自己存储数据的惯例,这些惯例可能与整洁数据的惯例大不相同。