通过 ID 与公式组合(或类似 tidy tibble 上的时间序列操作)向 tibble /dataframes 添加额外的行
Posted
技术标签:
【中文标题】通过 ID 与公式组合(或类似 tidy tibble 上的时间序列操作)向 tibble /dataframes 添加额外的行【英文标题】:Adding extra rows to tibble /dataframes by ID combination with formula (or Time series like operations on tidy tibble) 【发布时间】:2021-12-04 09:48:16 【问题描述】:在 R 中以整齐的数据形式完成某些时间序列操作似乎不如在 Excel 中使用矩阵数组或宽形式(具有维度之一)完成。例如,我想添加 2035 年的数据作为以前排放量的函数 Emissions_2035=Emissions_2030+(Emissions_2030-Emissions_2025) 但在下面的“整洁”数据表格中。 ((或者我可能想要一个“滞后运算符”用于将年份作为 ID 变量之一的小标题。))如何创建一种简单一致的方法来为每个部门/区域组合添加 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...
)
【问题讨论】:
您是否只有两年(2025 年和 2030 年)的数据,并且想创建只有 2035 年的数据? 不,这个数据很大。这里有许多部门、地区,一般来说,我希望一个操作按顺序工作排放 t 是排放 t-1 e_(t)= f(e_(t-1)) 的函数 您能否增加样本数据集中至少 2 组和每组 4-5 行的行并为其显示相应的输出? 我已经做到了 我的回答确实适用于这些新数据。虽然,数字不同。你在输出中只显示虚拟数字吗?如果没有,你是怎么计算出来的? 【参考方案1】:你可以试试-
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)
【讨论】:
这太棒了。那么 diff 就像魔术一样工作吗?如何?它是否以某种方式采用分组操作的“当前行”中相同 ID 变量的前一行?或者它是否依赖于它按 ID 变量排序(所以最后一行(在大多数情况下)是前一年)。以上是关于通过 ID 与公式组合(或类似 tidy tibble 上的时间序列操作)向 tibble /dataframes 添加额外的行的主要内容,如果未能解决你的问题,请参考以下文章
C++Clang-Tidy提示:“Clang-Tidy: Potential uncovered code path; add a default label”的解决方案