从 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 提供,适用于 Date
和 IDate
向量。 (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 函数,例如 weekdays
和 months
可以在帮助页面 ?quarters
中找到。
【讨论】:
【参考方案4】:dint
包也适用于:
library("dint")
d=as.Date("2015-01-01")
get_quarter(d)
你可以在here找到更多关于这个包的信息。
【讨论】:
以上是关于从 r 中的日期中仅提取季度的主要内容,如果未能解决你的问题,请参考以下文章