tidyr::spread() 而不创建单独的行?

tidyr::spread() without creating separate rows?

我对此很陌生,但正在努力自学。我正在查看 babynames 数据集并尝试获取 DF,其中名称 Kerry 按年份分组,其中一列为女性人数,一列为男性人数.这是我正在做的事情:

kDF <- babynames %>%
  filter(name == "Kerry") %>%
  group_by(year) %>%
  spread(sex, n)

我的结果:

    year  name         prop     F     M
   (dbl) (chr)        (dbl) (int) (int)
1   1920 Kerry 4.019228e-06     5    NA
2   1921 Kerry 5.272723e-06    NA     6
3   1922 Kerry 4.443149e-06    NA     5
4   1923 Kerry 6.181856e-06    NA     7
5   1924 Kerry 1.112053e-05    NA    13
6   1925 Kerry 4.750590e-06     6    NA
7   1925 Kerry 1.215902e-05    NA    14
8   1926 Kerry 8.730209e-06    NA    10
9   1927 Kerry 4.044368e-06     5    NA
10  1927 Kerry 1.205207e-05    NA    14

你可以看到,有一些重复的年份:1925 年、1927 年。我想要的是这些年份的一行以及它们适当的 F 和 M 值。我该怎么做?

期望的输出:

    year  name         prop     F     M
   (dbl) (chr)        (dbl) (int) (int)
1   1920 Kerry 4.019228e-06     5    NA
2   1921 Kerry 5.272723e-06    NA     6
3   1922 Kerry 4.443149e-06    NA     5
4   1923 Kerry 6.181856e-06    NA     7
5   1924 Kerry 1.112053e-05    NA    13
6   1925 Kerry 4.750590e-06     6    14 <<<
7   1926 Kerry 8.730209e-06    NA    10
8   1927 Kerry 4.044368e-06     5    14 <<<

我想你想要这样的东西:

library(dplyr)
library(tidyr)
answer = 
  babynames %>%
  filter(name == "Kerry") %>%
  group_by(year, sex) %>%
  summarize(n = sum(n)) %>%
  spread(sex, n, fill = 0)