您可以使用 zoo 包中的 na.approx 将 NA 替换为插值。
library(tidyverse)
library(zoo)
df %>%
group_by(Country) %>%
complete(Year = full_seq(2010:2100, 1)) %>%
fill(Model, Scenario, Version, SSP, Date) %>%
mutate_at(vars(population, gdp), na.approx, rule = 2)
Country Year Model Scenario population gdp SSP Version Date
<chr> <dbl> <chr> <chr> <dbl> <dbl> <chr> <chr> <int>
1 Aruba 2010 OECD SSP2_v9_130325 0.102 0.00247 SSP2 v9 130325
2 Aruba 2011 OECD SSP2_v9_130325 0.104 0.00265 SSP2 v9 130325
3 Aruba 2012 OECD SSP2_v9_130325 0.106 0.00282 SSP2 v9 130325
4 Aruba 2013 OECD SSP2_v9_130325 0.108 0.00300 SSP2 v9 130325
5 Aruba 2014 OECD SSP2_v9_130325 0.11 0.00317 SSP2 v9 130325
6 Aruba 2015 OECD SSP2_v9_130325 0.112 0.00335 SSP2 v9 130325
7 Aruba 2016 OECD SSP2_v9_130325 0.113 0.00354 SSP2 v9 130325
8 Aruba 2017 OECD SSP2_v9_130325 0.115 0.00373 SSP2 v9 130325
9 Aruba 2018 OECD SSP2_v9_130325 0.116 0.00393 SSP2 v9 130325
10 Aruba 2019 OECD SSP2_v9_130325 0.118 0.00412 SSP2 v9 130325
# … with 81 more rows
我以为你想group_by Country。此外,这包括rule = 2 以在时间点范围之外进行推断(您的样本数据仅到 2035 年)。 2035 年以后的外推值将根据最新值保持不变。
如果您想探索除插值之外的外插替代方案,您可以尝试使用na.spline 也来自zoo:
df %>%
group_by(Country) %>%
complete(Year = full_seq(2010:2100,1)) %>%
fill(Model, Scenario, Version, SSP, Date) %>%
mutate_at(vars(population, gdp), na.spline, method = "natural")
在这里您可以看到 2035 年之后的外推值的差异:
...
21 Aruba 2030 OECD SSP2_v9_130325 0.131 0.00722 SSP2 v9 130325
22 Aruba 2031 OECD SSP2_v9_130325 0.132 0.00759 SSP2 v9 130325
23 Aruba 2032 OECD SSP2_v9_130325 0.133 0.00798 SSP2 v9 130325
24 Aruba 2033 OECD SSP2_v9_130325 0.134 0.00837 SSP2 v9 130325
25 Aruba 2034 OECD SSP2_v9_130325 0.135 0.00877 SSP2 v9 130325
26 Aruba 2035 OECD SSP2_v9_130325 0.136 0.00918 SSP2 v9 130325
27 Aruba 2036 OECD SSP2_v9_130325 0.137 0.00959 SSP2 v9 130325
28 Aruba 2037 OECD SSP2_v9_130325 0.138 0.00999 SSP2 v9 130325
29 Aruba 2038 OECD SSP2_v9_130325 0.139 0.0104 SSP2 v9 130325
30 Aruba 2039 OECD SSP2_v9_130325 0.140 0.0108 SSP2 v9 130325
31 Aruba 2040 OECD SSP2_v9_130325 0.141 0.0112 SSP2 v9 130325
32 Aruba 2041 OECD SSP2_v9_130325 0.142 0.0116 SSP2 v9 130325
33 Aruba 2042 OECD SSP2_v9_130325 0.143 0.0120 SSP2 v9 130325
34 Aruba 2043 OECD SSP2_v9_130325 0.144 0.0124 SSP2 v9 130325
35 Aruba 2044 OECD SSP2_v9_130325 0.145 0.0128 SSP2 v9 130325
...
数据
df <- structure(list(Model = c("OECD", "OECD", "OECD", "OECD", "OECD",
"OECD"), Scenario = c("SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325",
"SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325"), Year = c(2010L,
2015L, 2020L, 2025L, 2030L, 2035L), population = c(0.102, 0.112,
0.119, 0.125, 0.131, 0.136), Country = c("Aruba", "Aruba", "Aruba",
"Aruba", "Aruba", "Aruba"), gdp = c(0.00247, 0.00335, 0.00431,
0.00559, 0.00722, 0.00918), SSP = c("SSP2", "SSP2", "SSP2", "SSP2",
"SSP2", "SSP2"), Version = c("v9", "v9", "v9", "v9", "v9", "v9"
), Date = c(130325L, 130325L, 130325L, 130325L, 130325L, 130325L
)), class = "data.frame", row.names = c("1", "2", "3", "4", "5",
"6"))