我正在关注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)
即使我在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
答案 0 :(得分:4)
这看起来是一个相当简单的代码问题。是的,它可能应该由Hadley和co修复,但这不是什么大问题。
如果您首先在控制台中打印by_age
,您应该看到:
# A tibble: 351 x 4
# Groups: age, marital [351]
因此,tibble按age
和marital
分组。这意味着count()
和后续sum(n)
(mutate
内)都会返回相同的值,因为sum
仅在只有一个值即{{}}的组中计算1}} - &gt; sum(n) == n
。
您使用prop === 1
走在正确的轨道上,但是,所需的计算方法是每个年龄的每个婚姻状况的比例。因此,在ungroup()
和group(age)
之间添加count
,您就是黄金。
mutate
结果: