我只想从日期中提取四分之一,例如,从日期"2003-02-08“中提取整数1。我一直在沿着这条路线尝试一些东西
library(mondate)
as.yearqtr(dat$DATE)“2003年Q1”
as.character(as.yearqtr(dat$DATE))[1]“2003年Q1”
一直没有给出我想要的结果。当然,我可以按以下方式编写条件
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!我真希望我能接受所有的答案!
发布于 2016-08-29 15:28:03
我会这样做:
# 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 3quarter函数由data.table提供,工作在Date和IDate向量上。(IDate使用整数存储。)
发布于 2016-08-29 15:46:25
有一个基本的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中找到.
发布于 2016-08-29 15:39:12
lubridate包具有相同的功能。我们也可以用它。我使用的是@Frank的DT
DT[, qtr := lubridate::quarter(d)]https://stackoverflow.com/questions/39209763
复制相似问题