Я использую свою собственную версию набора данных гэпминдера и пытаюсь увидеть, какая страна достигла наибольшего роста с 2008 по 2018 год. Когда я использую исходные данные гэпиндера, он работает нормально, но по какой-то причине я не могу воспроизвестина моем собственном наборе данных?Проблема в том, что я не могу использовать na.locf()
, потому что все строки "2008" заполняются до "2018"
Я использую функцию распространения, но она возвращает значения таким образом, что я не могу перенести последнее наблюдениевперед и функция group_by
, похоже, не работает
# The code on the original data that works fine
library(gapminder)
gapminder %>%
filter(year %in% c("1952", "1957")) %>%
spread(year, pop) %>%
na.locf() %>%
mutate(diff = `1957` - `1952`)
Однако, когда я использую свой набор данных (структура такая же), он изменяет данные таким образом, который трудно вычесть
> class(gapminder_df$Year)
[1] "integer"
> class(gapminder_df$population)
[1] "numeric"
# and
> nrow(gapminder_df[gapminder_df$Year == "2018",])
[1] 134
> nrow(gapminder_df[gapminder_df$Year == "2008",])
[1] 134
top_10 <- gapminder_df %>%
filter(Year %in% c("2008", "2018")) %>%
spread(Year, population) %>%
na.locf()
первый столбец имеет NA для первой половины строк, а второй столбец возвращает NA для второй половины, и поэтому я не могу вычесть ... group_by(country)
не дает желаемогорезультаты:
2018 2008 country
1 NA 27300000 Afghanistan
2 NA 2990000 Albania
3 NA 34900000 Algeria
4 NA 21800000 Angola
вот пример данных
gapminder_df <- tibble(
Country = c(rep("Afganistan", 4), rep("Albania", 4), rep("Algeria",4),rep("Angola",4)),
Year = rep(c("2008", "2009", "2018", "2004"), 4),
population = rnorm(16, mean = 5000000, sd = 50)
)
РЕДАКТИРОВАТЬ: Мне удалось исправить это, выбрав только соответствующие столбцы перед распространением ..Может кто-нибудь объяснить мне, почему это работает?Я предполагаю, что у меня было несколько одинаковых дат для одних и тех же стран с множеством разных значений для других переменных?
top_10 <- gapminder_df %>%
select(country, Year, population) %>%
filter(Year %in% c("2008", "2018")) %>%
spread(Year, population)