我想将一个财政月末日期更改为R中的一个数据集。在我的公司中,财政月末应该是该日期的21号。例如
2019年12月22日至2020年1月21日2020年1月22日至2020年2月21日将于2020年2月22日至2020年3月21日将2020年3月2日至2020年3月21日,以此类推
数据集

Desired_output

如何在R中完成此操作。数据中的日期列为%m/%d/%Y(1/22/2020)
发布于 2020-08-29 13:46:39
您可以提取日期,如果日期大于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'))data
使用以下示例数据:
dat <- data.frame(Date = seq(as.Date('2020-01-20'), by = '1 day',length.out = 5))发布于 2020-08-29 16:41:04
1)年月我们执行以下步骤:
创建测试数据类,该测试数据类既显示周期月份开始中的日期(即,22日或更晚),又显示周期月末中的日期(即,21或earlier)
d d to Date class,给予dd
d of ym of yearmon类(其表示没有日期的一年和月份,并且直接和内部地将其表示为表示1月的年份加0,表示2月的1/12,...,12月为11/12 ),然后添加1/12,以获得财政period.
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将其转换为1。加上31,将其移至月末,并对其进行格式化,即可得到最终答案。
format(as.Date(cut(dd - 21, "month")) + 31, "%b-%y")
## [1] "Feb-20" "Jan-20"https://stackoverflow.com/questions/63643275
复制相似问题