首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从r中的日期中只提取四分之一

从r中的日期中只提取四分之一
EN

Stack Overflow用户
提问于 2016-08-29 15:21:22
回答 4查看 21.6K关注 0票数 8

我只想从日期中提取四分之一,例如,从日期"2003-02-08“中提取整数1。我一直在沿着这条路线尝试一些东西

代码语言:javascript
复制
library(mondate)
as.yearqtr(dat$DATE)

“2003年Q1”

代码语言:javascript
复制
as.character(as.yearqtr(dat$DATE))[1]

“2003年Q1”

一直没有给出我想要的结果。当然,我可以按以下方式编写条件

代码语言:javascript
复制
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!我真希望我能接受所有的答案!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-29 15:28:03

我会这样做:

代码语言:javascript
复制
# 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使用整数存储。)

票数 15
EN

Stack Overflow用户

发布于 2016-08-29 15:46:25

有一个基本的R函数,quarters,它或多或少地实现了你想要的东西,尽管它的前面是"Q“。所以

代码语言:javascript
复制
quarters(as.Date("2001-05-01"))
[1] "Q2"

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

代码语言:javascript
复制
substr(quarters(as.Date("2001-05-01")), 2, 2)
[1] "2"

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

票数 25
EN

Stack Overflow用户

发布于 2016-08-29 15:39:12

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

代码语言:javascript
复制
DT[, qtr := lubridate::quarter(d)]
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39209763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档