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

时间:2015-12-03 02:23:58

标签: r dplyr tidyr

我是新手,但努力自学。我正在查看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 <<<

1 个答案:

答案 0 :(得分:0)

我想你想要这样的东西:

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