r - 扩展函数在两列之一中返回所有“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)
解决方案
推荐阅读
- visual-studio - 表达式必须通过 MPI 世界大小在数组中具有常量值错误
- python - 基于另一个数据框在数据框中创建新列
- java - 如何在wiremock中使用“优先级”
- linux - 从文件名中递归删除模式而不更改路径
- c# - Unity中基于网格/平铺移动+碰撞?
- javascript - Progress bar - jQuery to Pure Vanilla JS
- r - Sub-setting or arrange the data in R
- java - How can I add a TreeNode to a JTree constructed with the default constructor?
- java - How do I fix my java fx issues?
- java - How to define nested class constants?