gpt4 book ai didi

r - 上季度末/上季度最后一天

转载 作者:行者123 更新时间:2023-12-02 02:31:58 27 4
gpt4 key购买 nike

使用lubridate,如何计算给定日期上一季度的最后一天?以下公式似乎不适用于 2014 年 11 月 3 日(其他日期也适用)

library(lubridate)
date = as.POSIXct("2014-11-03")
date - days(day(date)) - months(month(date) %% 3 - 1)
# NA

很有趣,改变顺序是有效的:

date - months(month(date) %% 3 - 1) - days(day(date))
# "2014-09-30 UTC"

最佳答案

以下是 zootimeDate 包以及 base R 中的函数的一些可能性。zoo 代码由 @G.Grothendieck 改进,他还建议了 base 替代方案(非常感谢!)。我将 lubridate 解决方案留给其他人。

首先,使用zoo包中的classyearqtr来表示季度数据。然后,您可以使用 as.Date.yearqtrfrac 参数,“它是 0 到 1 之间的数字(含 0 和 1),指示结果所耗时段的分数代表。默认值为 0,表示周期的开始”(参见 ?yearqtr?yearmon for frac)。

一步一步:

library(zoo)

date <- as.Date("2014-11-03")

# current quarter
current_q <- as.yearqtr(date)
current_q
# [1] "2014 Q4"

# first date in current quarter
first_date_current_q <- as.Date(current_q, frac = 0)
first_date_current_q
# [1] "2014-10-01"

# last date in previous quarter
last_date_prev_q <- first_date_current_q - 1
last_date_prev_q
# [1] "2014-09-30"

@G.Grothendieck 的简短版本(谢谢!)

as.Date(as.yearqtr(date)) - 1
# [1] "2014-09-30"

@G.Grothendieck 提供的一个不错的基础 R 解决方案

as.Date(cut(date, "quarter")) - 1
# [1] "2014-09-30"

另一种可能性是使用timeDate包中的timeFirstDayInQuartertimeLastDayInQuarter函数:

library(timeDate)
timeLastDayInQuarter(timeFirstDayInQuarter(date) - 1)
# GMT
# [1] [2014-09-30]

关于r - 上季度末/上季度最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27015838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com