【问题标题】:Adding fiscal month end添加会计月末
【发布时间】:2020-08-29 03:58:45
【问题描述】:

我想将财政月末日期更改为 R 中的数据集。在我的公司中,财政月末日期将是 21 日。例如

2019 年 12 月 22 日至 2020 年 1 月 21 日为 2020 年 1 月 2020 年 1 月 22 日至 2020 年 2 月 21 日为 2020 年 2 月 2020 年 2 月 22 日至 2020 年 3 月 21 日为 2020 年 3 月 等等

数据集

Desired_output

我将如何在 R 中完成此操作。我数据中的日期列是 %m/%d/%Y(1/22/2020)

【问题讨论】:

  • 请使用dput 添加数据的前几行并显示预期输出。 dput(head(df)).
  • @RonakShah 刚刚添加
  • 请参阅r标签页顶部的发布说明。如果您发布图像,那么除了繁琐地重新输入数据之外,没有人可以使用这些数据。在您的问题中显示dput(x) 或dput(head(x)) 的输出可以避免这个问题。

标签: r date lubridate


【解决方案1】:

您可以提取日期,如果日期大于 22,则添加 10 天并以月-年格式获取日期:

transform(dat, Fiscal_Month = format(Date + 
               ifelse(as.integer(format(Date, '%d')) >= 22, 10, 0), '%b %Y'))

#        Date Fiscal_Month
#1 2020-01-20     Jan 2020
#2 2020-01-21     Jan 2020
#3 2020-01-22     Feb 2020
#4 2020-01-23     Feb 2020
#5 2020-01-24     Feb 2020

没有ifelse也可以这样做:

transform(dat, Fiscal_Month = format(Date + c(0, 10)
                        [(as.integer(format(Date, '%d')) >= 22) + 1], '%b %Y'))

数据

使用了这个样本数据:

dat <- data.frame(Date = seq(as.Date('2020-01-20'), by = '1 day',length.out = 5))

【讨论】:

    【解决方案2】:

    1) yearmon我们执行以下步骤:

    • 创建测试数据d,它同时显示期间月份开始的日期(即 22 日或更晚)和期间月份结束的日期(即 21 日或更早)
    • 将输入d 转换为Date 类给dd
    • 减去 21 天,从而将其移至会计期开始的月份
    • 将其转换为yearmon 类的ym(它直接表示没有一天的年份和月份,内部表示为年份加0 表示一月,1/12 表示二月,...,11/ 12 表示 12 月),然后加上 1/12 得到会计期末的月份。
    • 如图所示格式化。 (如果yearmon 使用的默认格式(例如 2020 年 1 月)没问题,我们可以省略这一步,即最后一行代码。

    整个内容可以很容易地用一行代码编写,但为了清楚起见,我们将其分解。

    library(zoo)
    
    d <- c("1/22/2020", "1/21/2020") # test data
    
    dd <- as.Date(d, "%m/%d/%Y")
    ym <- as.yearmon(dd - 21) + 1/12
    format(ym, "%b-%y")
    ## [1] "Feb-20" "Jan-20"
    

    2) Base R 这可以仅在 base R 中使用,如下所示。从上面利用dd。 cut 计算 dd-21 所在月份的第一天(但不是作为 Date 类对象),然后 as.Date 将其转换为一个。添加 31 将其移至期末并对其进行格式化,我们得到最终答案。

    format(as.Date(cut(dd - 21, "month")) + 31, "%b-%y")
    ## [1] "Feb-20" "Jan-20"
    

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多