我正在使用自己的版本的gapminder数据集,并试图查看哪个国家从2008年到2018年实现了最大的增长。当我使用原始的gapminder数据时,效果很好,但由于某些原因,我无法复制在我自己的数据集上?问题是我不能使用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)