"R for Data Science" 书(威克姆)。无法重现示例

"R for Data Science" book (Wickham) . Cannot reproduce example

我正在关注 H. Wickham 的 R for Data Science,但无法从该书中提取代码片段。 我参考了本书的 this 部分和下图。 .

我从书上直接复制粘贴了部分代码,但没有达到预期效果。

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)

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

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

主要问题是 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

这看起来是一个相当简单的代码问题。是的,它可能应该由哈德利和他的同事修理,但这没什么大不了的。

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

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

因此,tibble 按 agemarital 分组。这意味着 count() 和随后的 sum(n)(在 mutate 内)return 是相同的值,因为 sum 仅在只有一个的组上计算值即 sum(n) == n --> prop === 1.

您的 ungroup() 是在正确的轨道上,但是,所需的计算是每个年龄的每个婚姻状况的比例。所以,在 countmutate 之间添加一个 group(age),你就是金色的。

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

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

结果: