通过 ID 与公式的组合(或像 tidy tibble 上的操作这样的时间序列)向 tibble /dataframes 添加额外的行

Adding extra rows to tibble /dataframes by ID combination with formula (or Time series like operations on tidy tibble)

某些时间序列操作在 R 中以整洁的数据形式完成似乎不如使用矩阵数组或宽形式(年份是维度之一)更直观,例如 Excel.例如,我想添加 2035 数据作为之前排放量的函数 Emissions_2035=Emissions_2030+(Emissions_2030-排放量_2025) 但在下面的 'tidy' 数据表中。 ((或者我可能想要 'lagged operator' 作为 ID 变量之一的 tibbles。))我如何创建一种简单一致的方法来为每个 sector/region 组合添加 2035 数据?

我需要某种时间序列对象来执行此操作吗?

Emissions = tribble(
~Sector, ~CountryOrRegion,~Year, ~Emissions,
"Transport","Africa","2025","452627",
"Transport","Africa","2030","546313",
"Buildings","Africa","2025","52627",
"Buildings","Africa","2030","46313",
"Transport","Europe","2025","652627",
"Transport","Europe","2030","746313",
#etc...
)

期望的输出:

Emissions = tribble(
~Sector, ~CountryOrRegion,~Year, ~Emissions,
"Transport","Africa","2025","452627",
"Transport","Africa","2030","546313",
"Transport","Africa","2035","641234",
"Buildings","Africa","2025","52627",
"Buildings","Africa","2030","46313",
"Buildings","Africa","2035","41234",
"Transport","Europe","2025","652627",
"Transport","Europe","2030","746313",
"Transport","Europe","2035","841234",
#etc...

)

你可以试试-

library(dplyr)

#change character to numbers
Emissions <- Emissions %>% type.convert(as.is = TRUE) 

Emissions %>%
  arrange(Sector, CountryOrRegion, Year) %>%
  group_by(Sector, CountryOrRegion) %>%
  summarise(Year = 2035,
            Emissions = last(Emissions) + diff(Emissions), .groups = 'drop')  %>%
  bind_rows(Emissions) %>%
  arrange(Sector, CountryOrRegion, Year)