【问题标题】:tidyr::spread() without creating separate rows? [closed]tidyr::spread() 不创建单独的行? [关闭]
【发布时间】:2016-03-07 12:33:11
【问题描述】:

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

【问题讨论】:

  • 什么是道具?您希望它在结果数据框的行中取什么值?
  • 感谢您的帮助,艾琳。我不确定我知道你在问什么。在这种情况下不确定“道具”或“它”。但是,与上面相比,我希望看到的是:年名 prop F M 6 1925 Kerry 4.750590e-06 6 14 7 1926 Kerry 8.730209e-06 NA 10 8 1927 Kerry 4.044368e-06 5 14
  • 所以你不想要例如 1927 年的 1.205207e-05

标签: r dplyr tidyr


【解决方案1】:

我想你想要这样的东西:

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

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2015-07-22
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2019-01-26
    • 2020-02-22
    相关资源
    最近更新 更多