2016-08-29 29 views
2

日付から四半期のみを抽出したいと思います。たとえば、「2003-02-08」の日付から整数1を取得したいとします。私は、この線に沿って何かをしようとしているrの日付から四半期のみを抽出する

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!私は本当にすべての答えを受け入れることができたらいいと思う!

答えて

7

私はどうなる:

# 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は整数ストレージを使用します)

3

lubridateパッケージは同じ機能を持ちます。私たちもそれを使うことができます。私はそれが「Q」を付加しますけれども、ベースR機能、quartersは、多かれ少なかれ、あなたが望むものを達成していること、があるフランクのDT

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

@使用しています。それは、「Q」を取り除くことが重要であるので、もし

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

は、あなたが使用することができsubstr

substr(quarters(as.Date("2001-05-01")), 2, 2) 
[1] "2" 
ヘルプで見つけることができるように weekdaysmonthsとして

その他の日付関連のベースRの機能、ページ?quarters

関連する問題