[英]Calculating rate of change over rows in R in multiple large datasets
我目前使用相同行号但不同列号的多个大型数据集。 现在我需要计算列之间的变化率,并将其添加到新的 object 或现有的 object 到 go 上。
在我对 web 的研究中,我通常只遇到有人试图计算列中的变化率,而不是那些之间。 翻转所有数据是最简单的方法吗?
我对我的问题的模糊描述感到非常抱歉,因为 R 和英语不是我的第一语言。
我希望您仍然可以为我指明方向,以进一步了解 R。
提前感谢您提供的任何提示!
我建议将所有数据连接在一起,然后将其转换为 3NF 规范化长格式表:
library(tidyverse)
data1 <- tibble(
country = c("A", "B", "C"),
gdp_2020 = c(1, 8, 10),
gdp_2021 = c(1, 8, 10),
population_2010 = c(5e3, 6e3, 6e3),
population_2020 = c(5.5e3, 6.8e3, 6e3)
)
data1
#> # A tibble: 3 x 5
#> country gdp_2020 gdp_2021 population_2010 population_2020
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 A 1 1 5000 5500
#> 2 B 8 8 6000 6800
#> 3 C 10 10 6000 6000
data2 <- tibble(
country = c("A", "B", "C"),
population_2021 = c(7e3, 8e3, 7e3),
population_2022 = c(7e3, 7e3, 10e3)
)
data2
#> # A tibble: 3 x 3
#> country population_2021 population_2022
#> <chr> <dbl> <dbl>
#> 1 A 7000 7000
#> 2 B 8000 7000
#> 3 C 7000 10000
list(
data1,
data2
) %>%
reduce(full_join) %>%
pivot_longer(matches("^(gdp|population)")) %>%
separate(name, into = c("variable", "year"), sep = "_") %>%
type_convert() %>%
arrange(country, variable, year) %>%
group_by(variable, country) %>%
mutate(
# NA for the first value because it does not have a precursor to calculate change
change_rate = (value - lag(value)) / (year - lag(year))
)
#> Joining, by = "country"
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> country = col_character(),
#> variable = col_character(),
#> year = col_double()
#> )
#> # A tibble: 18 x 5
#> # Groups: variable, country [6]
#> country variable year value change_rate
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 A gdp 2020 1 NA
#> 2 A gdp 2021 1 0
#> 3 A population 2010 5000 NA
#> 4 A population 2020 5500 50
#> 5 A population 2021 7000 1500
#> 6 A population 2022 7000 0
#> 7 B gdp 2020 8 NA
#> 8 B gdp 2021 8 0
#> 9 B population 2010 6000 NA
#> 10 B population 2020 6800 80
#> 11 B population 2021 8000 1200
#> 12 B population 2022 7000 -1000
#> 13 C gdp 2020 10 NA
#> 14 C gdp 2021 10 0
#> 15 C population 2010 6000 NA
#> 16 C population 2020 6000 0
#> 17 C population 2021 7000 1000
#> 18 C population 2022 10000 3000
由代表 package (v2.0.1) 于 2021 年 12 月 16 日创建
示例:第二行的变化率(A 国的 gdp)为 0,因为 2021 年和 2020 年都相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.