“R for Data Science”一书(Wickham)。无法重现的例子

时间:2017-08-24 00:11:51

标签: r tidyverse

我正在关注H. Wickham的 R for Data Science ,并且无法从该书籍中获得代码片段。 我参考了this部分和本书的下图。  plot

我从书中复制并粘贴了部分代码,但它没有按预期工作。

library(tidyverse)
library(forcats)

by_age <-  gss_cat %>%
  filter(!is.na(age)) %>%
  group_by(age, marital) %>%
  count() %>%
  mutate(prop = n / sum(n))

ggplot(by_age, aes(age, prop, color = marital)) +
  geom_line(na.rm = TRUE)

即使我在ungroup() %>%之前使用mutate(),它也可以绘制一些内容,但不是书中的内容(略有不同的模式)。

如果有人能解释这个悖论,我将不胜感激。

主要问题是prop在我的情况下都等于1。结果,我在图上只得到一条水平线。

谢谢!

tidyverse版本:1.1.1 R版本3.4.1(2017-06-30) 平台:x86_64-w64-mingw32 / x64(64位) 运行于:Windows 7 x64(内部版本7601)Service Pack 1

1 个答案:

答案 0 :(得分:4)

这看起来是一个相当简单的代码问题。是的,它可能应该由Hadley和co修复,但这不是什么大问题。

如果您首先在控制台中打印by_age,您应该看到:

# A tibble: 351 x 4
# Groups:   age, marital [351]

因此,tibble按agemarital分组。这意味着count()和后续sum(n)mutate内)都会返回相同的值,因为sum仅在只有一个值即{{}}的组中计算1}} - &gt; sum(n) == n

您使用prop === 1走在正确的轨道上,但是,所需的计算方法是每个年龄的每个婚姻状况的比例。因此,在ungroup()group(age)之间添加count,您就是黄金。

mutate

结果:

result