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)
我对此很陌生,但正在努力自学。我正在查看 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)