r - 我的输出与代码不符,我无法确定我哪里出错了
问题描述
我使用 R 相对较新,我想使用“case when”语句为我的表创建一个名为 Reporting Month(格式:Date)的新列,条件是使用一个名为 Period(格式:Character)的列但是日期的输出仅从 2020 年 1 月 1 日到 2020 年 12 月 31 日,2019 年或 2021 年没有,有人可以帮忙吗?如果有更简洁的方法可以做到这一点,我也非常感谢您的一些建议!太感谢了!!
dt <- dt %>% mutate(
Reporting_Month = case_when(
Period == 'ZZZ-MARCH-2019' ~ as.Date("31/03/2019", format("%d/%m/%y")),
Period == 'ZZZ-APRIL-2019' ~ as.Date("30/04/2019", format("%d/%m/%y")),
Period == 'ZZZ-MAY-2019' ~ as.Date("31/05/2019", format("%d/%m/%y")),
Period == 'ZZZ-JUNE-2019' ~ as.Date("30/06/2019", format("%d/%m/%y")),
Period == 'ZZZ-JULY-2019' ~ as.Date("31/07/2019", format("%d/%m/%y")),
Period == 'ZZZ-AUGUST-2019' ~ as.Date("31/08/2019", format("%d/%m/%y")),
Period == 'ZZZ-SEPTEMBER-2019' ~ as.Date("30/09/2019", format("%d/%m/%y")),
Period == 'ZZZ-OCTOBER-2019' ~ as.Date("31/10/2019", format("%d/%m/%y")),
Period == 'ZZZ-NOVEMBER-2019' ~ as.Date("30/11/2019", format("%d/%m/%y")),
Period == 'ZZZ-DECEMBER-2019' ~ as.Date("31/12/2019", format("%d/%m/%y")),
Period == 'ZZZ-JANUARY-2020' ~ as.Date("31/01/2020", format("%d/%m/%y")),
Period == 'ZZZ-FEBRUARY-2020' ~ as.Date("29/02/2020", format("%d/%m/%y")),
Period == 'ZZZ-MARCH-2020' ~ as.Date("31/03/2020", format("%d/%m/%y")),
Period == 'ZZZ-APRIL-2020' ~ as.Date("30/04/2020", format("%d/%m/%y")),
Period == 'ZZZ-MAY-2020' ~ as.Date("31/05/2020", format("%d/%m/%y")),
Period == 'ZZZ-JUNE-2020' ~ as.Date("30/06/2020", format("%d/%m/%y")),
Period == 'ZZZ-JULY-2020' ~ as.Date("31/07/2020", format("%d/%m/%y")),
Period == 'ZZZ-AUGUST-2020' ~ as.Date("31/08/2020", format("%d/%m/%y")),
Period == 'ZZZ-SEPTEMBER-2020' ~ as.Date("30/09/2020", format("%d/%m/%y")),
Period == 'ZZZ-OCTOBER-2020' ~ as.Date("31/10/2020", format("%d/%m/%y")),
Period == 'ZZZ-NOVEMBER-2020' ~ as.Date("30/11/2020", format("%d/%m/%y")),
Period == 'ZZZ-DECEMBER-2020' ~ as.Date("31/12/2020", format("%d/%m/%y")),
Period == 'ZZZ-JANUARY-2021' ~ as.Date("31/01/2021", format("%d/%m/%y")),
TRUE ~ as.Date("31/01/2000")
)
)
解决方案
您可以将Period
类别更改yearmon
为日期,然后更改为日期frac = 1
以获取该月的最后一天。
library(dplyr)
library(zoo)
dt %>% mutate(Reporting_Month = as.Date(as.yearmon(Period,'ZZZ-%b-%Y'),frac = 1))
# Period Reporting_Month
#1 ZZZ-MARCH-2019 2019-03-31
#2 ZZZ-JUNE-2019 2019-06-30
#3 ZZZ-OCTOBER-2019 2019-10-31
#4 ZZZ-DECEMBER-2019 2019-12-31
数据
dt <- data.frame(Period = c('ZZZ-MARCH-2019', 'ZZZ-JUNE-2019',
'ZZZ-OCTOBER-2019', 'ZZZ-DECEMBER-2019'))
推荐阅读
- postgresql - 对于 xml - postgresql 中的类似功能
- javascript - 使用 JQuery 单击任意 2 个按钮时交换按钮文本
- r - 如何使用正则表达式返回部分字符串
- ssis - SSIS:如何设置延迟时间或等待来自 Web 服务的连接的任务
- apache-spark - 作业之间的 Apache Spark 延迟
- html - 为什么我的 CSS 可以使用一个 id,但不能使用另一个 IDENTICAL id?
- c# - 互相关,对中零频率元素
- angular - 防止 ng build 检查 index html
- java - 无法获得基本的工作方法
- java - 哪种插入排序更好。使用外部 for 和 while 或两个 for 循环。两者都生成相同的输出