在 R 中是不是有一种方法可以为年份添加一列以了解这一年的转变?

Posted

技术标签:

【中文标题】在 R 中是不是有一种方法可以为年份添加一列以了解这一年的转变?【英文标题】:Is there a way in R to add a column for year that understands that there has been a turn of the year?在 R 中是否有一种方法可以为年份添加一列以了解这一年的转变? 【发布时间】:2022-01-07 09:57:21 【问题描述】:

我在 R 中有一张如下表所示的表格。在 2017 年 11 月,我预测了 12 月目标第 50-53 周和 1 月第 1-4 周的值。我希望添加另一个名为 target_year 的列,其中包含预测值的年份,如第一个表下方的表中所示。 R中有没有办法在列中添加正确的年份?

在实际数据集中,我提前 30 周进行预测,从 forecast_years = 2015-2020 和 forecast_months = 1:12。

我有:

target_week forecast_month forecast_year weekly_level
1 11 2017 0.011
2 11 2017 0.009
3 11 2017 0.011
4 11 2017 0.010
50 11 2017 0.005
51 11 2017 0.005
52 11 2017 0.007
53 11 2017 0.006

我希望拥有:

target_week target_year forecast_month forecast_year weekly_level
1 2018 11 2017 0.011
2 2018 11 2017 0.009
3 2018 11 2017 0.011
4 2018 11 2017 0.010
50 2017 11 2017 0.005
51 2017 11 2017 0.005
52 2017 11 2017 0.007
53 2017 11 2017 0.006

【问题讨论】:

【参考方案1】:

创建添加列的逻辑条件

library(dplyr)
df1 <- df1 %>%
    mutate(target_year = case_when(target_week < 50 ~ 
       as.integer(forecast_year + 1), TRUE ~ forecast_year), .before = 2)

-输出

df1
  target_week target_year forecast_month forecast_year weekly_level
1           1        2018             11          2017        0.011
2           2        2018             11          2017        0.009
3           3        2018             11          2017        0.011
4           4        2018             11          2017        0.010
5          50        2017             11          2017        0.005
6          51        2017             11          2017        0.005
7          52        2017             11          2017        0.007
8          53        2017             11          2017        0.006

数据

df1 <- structure(list(target_week = c(1L, 2L, 3L, 4L, 50L, 51L, 52L, 
53L), forecast_month = c(11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L
), forecast_year = c(2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 
2017L, 2017L), weekly_level = c(0.011, 0.009, 0.011, 0.01, 0.005, 
0.005, 0.007, 0.006)), class = "data.frame", row.names = c(NA, 
-8L))

【讨论】:

谢谢!但在实际数据集中,我是提前 30 周进行预测,并且从 forecast_years = 2015-2020 和 forecast_months = 1:12 开始。所以我必须有一个适用于更大日期集的代码......【参考方案2】:

我建议您查看滑块包。它是日期感知的(处理诸如年末和一个月中不一致的日子之类的事情),并且基本上可以启用前向和后向窗口。考虑一下基本情况,例如允许轻松管理滚动总和和平均值。这是一个创建当前和上个月的滚动窗口并对其执行函数的示例。如果您正在查看固定间隔(周),请查看 block 函数。

library(slider)
m2 <- slide_index(t$data, t$month, ~ f(.x), identity, .before = ~.x %m-% months(1))

【讨论】:

以上是关于在 R 中是不是有一种方法可以为年份添加一列以了解这一年的转变?的主要内容,如果未能解决你的问题,请参考以下文章

如何项sql数据库中添加一年的日期

Codeigniter 如何在用户的注册日期中添加一年

是否可以向查询添加一列不同/唯一值?

java 添加一组元素

如何在 Google Dataflow 中添加列以查询结果

仅在案例语句中添加年份得到无效数字错误 - ORA-01722