R 我的输出与代码不符,我无法确定哪里出了问题

R 我的输出与代码不符,我无法确定哪里出了问题,r,dplyr,case-when,R,Dplyr,Case When,我使用R比较新,我想使用“case-when”语句为我的表创建一个名为Reporting Month(格式:Date)的新列,条件是使用名为Period(格式:Character)的列 代码已执行,但日期的输出范围仅为2020年1月31日至2020年12月31日,2019年或2021年没有,有人能帮忙吗?如果有更整洁的方法,我也会非常感谢你的建议!非常感谢你 dt <- dt %>% mutate( Reporting_Month = case_when( Period

我使用R比较新,我想使用“case-when”语句为我的表创建一个名为Reporting Month(格式:Date)的新列,条件是使用名为Period(格式:Character)的列 代码已执行,但日期的输出范围仅为2020年1月31日至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")
  )
)
dt%突变(
报告月份=案例时间(
期间==“ZZZ-MARCH-2019”~截止日期(“2019年3月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-APRIL-2019”~截止日期(“2019年4月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-MAY-2019”~截止日期(“2019年5月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-JUNE-2019”~截止日期(“2019年6月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-JULY-2019”~截止日期(“2019年7月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-AUGUST-2019”~截止日期(“2019年8月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-2019年9月”~截止日期(“2019年9月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-2019年10月”~截止日期(“2019年10月31日”,格式(“%d/%m/%y”),
期间=='ZZZ-十一月-2019'~截止日期(“2019年11月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-DECEMBER-2019”~截止日期(“2019年12月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-Janur-2020”~截止日期(“2020年1月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-June-2020”~截止日期(“2020年2月29日”,格式(“%d/%m/%y”),
期间==“ZZZ-MARCH-2020”~截止日期(“2020年3月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-APRIL-2020”~截止日期(“2020年4月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-MAY-2020”~截止日期(“2020年5月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-JUNE-2020”~截止日期(“2020年6月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-JULY-2020”~截止日期(“2020年7月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-AUGUST-2020”~截止日期(“2020年8月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-June-2020”~截止日期(“2020年9月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-10-2020”~截止日期(“2020年10月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-11-2020”~截止日期(“2020年11月30日”,格式(“%d/%m/%y”),
期间==“ZZZ-DECEMBER-2020”~截止日期(“2020年12月31日”,格式(“%d/%m/%y”),
期间==“ZZZ-JANUARY-2021”~截止日期(“2021年1月31日”,格式(“%d/%m/%y”),
真实至截止日期(“2000年1月31日”)
)
)
举个假例子

dt
> dt
             Period
1    ZZZ-APRIL-2019
2  ZZZ-OCTOBER-2019
3     ZZZ-JULY-2020
4 ZZZ-DECEMBER-2021
5  ZZZ-JANUARY-2021

您可以将
Period
更改为
yearmon
类,然后使用
frac=1更改为Date,以获取当月的最后一天

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'))

dt使用“lubridate::天花_date”,事情会简单得多。如果您创建一个小的可复制示例以及预期输出,那么就更容易提供帮助。请阅读。感谢Ronak,它仅在控制台上显示时才起作用,但当我尝试变异并将其作为列添加到数据帧时,以日期格式报告的月份是NA….:(@SL22122406您需要将数据分配回
dt
。尝试
dt%mutate(报告月份=截止日期(截止年月日,'ZZZ-%b-%Y'),frac=1))
Reporting\u Month
视为原始数据中的新列。你好,Ronak,我确实使用了上面的行创建了一个新列,但由于某种原因,它不起作用,新列由于一些奇怪的原因都返回为NA。非常感谢您的帮助,现在它已排序:)我认为用
%B
代替
%B
应该行得通<代码>dt%突变(报告月份=截止日期(截止年月日(期间,'ZZZ-%B-%Y'),分形=1))
。但奇怪的是,
%b
对我有效。谢谢AnilGoyal,我也尝试了你的代码,但我在UseMethod(“mutate”)中出现了一个错误:没有适用于“function”类对象的“mutate”方法加载了
dplyr
。我没有指定,因为这是您标记的。是的,我加载了dplyr很长一段时间,其中有一个属性:
library(tidyverse)library(readxl)library(dplyr)library(xlsx)library(zoo)library(lubridate)
,测试结果现在是NA<代码>测试P%变异(报告月份=截止日期(截止日期:'ZZZ-%b-%Y'),分形=1))
对不起,AnilGoyal,你的成功了!!非常感谢您的帮助:)
dt <- data.frame(Period = c('ZZZ-MARCH-2019', 'ZZZ-JUNE-2019', 
                            'ZZZ-OCTOBER-2019', 'ZZZ-DECEMBER-2019'))