在 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 中是不是有一种方法可以为年份添加一列以了解这一年的转变?的主要内容,如果未能解决你的问题,请参考以下文章