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

Ann*_*naZ 0 r tidyverse

我正在关注 H. Wickham 的R for Data Science ,但无法使那本书中的代码片段起作用。我参考了部分和本书的以下图表。 阴谋 .

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

tidyverse 版本:1.1.1 R 版本 3.4.1 (2017-06-30) 平台:x86_64-w64-mingw32/x64 (64-bit) 运行环境:Windows 7 x64 (build 7601) Service Pack 1

vin*_*jor 5

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

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

# A tibble: 351 x 4
# Groups:   age, marital [351]
Run Code Online (Sandbox Code Playgroud)

因此,tibble 由age和分组marital。这意味着两者count()和随后的sum(n)(在 内mutate)返回相同的值,因为sum仅在只有一个值的组上计算,即sum(n) == n--> prop === 1

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

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)
Run Code Online (Sandbox Code Playgroud)

结果是:

结果