首页 > 解决方案 > 扩展函数在两列之一中返回所有“NA”

问题描述

我正在使用我自己版本的 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) 

标签: rdplyrtidyrspread

解决方案


推荐阅读