从 r 中的日期中仅提取季度

Posted

技术标签:

【中文标题】从 r 中的日期中仅提取季度【英文标题】:Extract only quarter from a date in r 【发布时间】:2022-01-22 19:10:44 【问题描述】:

我只想从日期中提取季度,例如,从日期“2003-02-08”中获取整数 1。我一直在尝试这方面的东西

library(mondate)
as.yearqtr(dat$DATE)

“2003 年第一季度”

as.character(as.yearqtr(dat$DATE))[1]

“2003 年第一季度”

这并没有给出我想要的结果。当然可以写条件如下

library(data.table)
data$DATE = as.Date(data$DATE, format='%d%b%Y')
data$month=month(data$DATE)
setDT(data)[month==1,  quarter:=1]  
    ...

这可行,但一点也不优雅。有没有更漂亮的方法来做到这一点?

感谢 lmo 和 user2100721!我真希望我能接受所有的答案!

【问题讨论】:

【参考方案1】:

我愿意:

# example data
DT = data.table(id = 1:10, d = as.IDate("2003-02-08") + seq(100, by=50, length.out=10))

DT[, qtr := quarter(d)]

    id          d qtr
 1:  1 2003-05-19   2
 2:  2 2003-07-08   3
 3:  3 2003-08-27   3
 4:  4 2003-10-16   4
 5:  5 2003-12-05   4
 6:  6 2004-01-24   1
 7:  7 2004-03-14   1
 8:  8 2004-05-03   2
 9:  9 2004-06-22   2
10: 10 2004-08-11   3

quarter 函数由 data.table 提供,适用于 DateIDate 向量。 (IDate 使用整数存储。)

【讨论】:

【参考方案2】:

lubridate 包具有相同的功能。我们也可以使用它。我正在使用@Frank 的DT

DT[, qtr := lubridate::quarter(d)]

【讨论】:

【参考方案3】:

有一个基本的 R 函数 quarters,它或多或少地完成了你想要的,尽管它前置了“Q”。所以

quarters(as.Date("2001-05-01"))
[1] "Q2"

如果去掉“Q”很重要,你可以使用substr

substr(quarters(as.Date("2001-05-01")), 2, 2)
[1] "2"

其他与日期相关的基本 R 函数,例如 weekdaysmonths 可以在帮助页面 ?quarters 中找到。

【讨论】:

【参考方案4】:

dint 包也适用于:

library("dint")
d=as.Date("2015-01-01")
get_quarter(d)

你可以在here找到更多关于这个包的信息。

【讨论】:

以上是关于从 r 中的日期中仅提取季度的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何从数据框中仅提取年月日[重复]

r 从R中的日期提取月份

如何从日期时间对象中仅提取月份和日期?

从熊猫数据框中仅提取数字和字符串

从日期宏中仅提取年份

从字符串转换日期和/或时间并从日期中提取季度/年时转换失败