2016-12-19 7 views
0

ペンタッド日付で次のデータをサブセット化しようとしています。 Pentadは5日平均で重複しないことを意味する。うるう年の場合は、ペンタッド12は、2月29日(6平均日数の代わりに5)を備えて:閏年のペンタッド日付に基づくサブセットデータ

Link to Data

Link to pentad dates

ここに私のコードです:

library(stringr) 
dat  <- read.csv("tc_filt_1981-2007.csv",header = T,sep = ",") 

dat$Date = paste(dat$Year, str_pad(dat$Month,2,'left','0'), str_pad(dat$Day,2,'left','0'), sep='-') 
dat$yday = as.POSIXlt(dat$Date)$yday + 1 
dat$pentad = ceiling(dat$yday/5) 
df<-split(dat, dat$pentad) 

問題:

dat $ y行は365日間のみ有効です。ある年には73ペンタッドしかなければなりません。上記の私のコードは、dat $ pentadをチェックすると74ペンタッドを生成します。 dfは、各ペンタッドのデータフレームを含む。

は私がやったチェックのために、次の

test<-dat[which(dat$pentad == 74),] 

出力:

SN  CY Year Month Day Hour Lat Lon Cat Date yday pentad 
200034 34 2000 12 31 0 12.7 128.2 TS 2000-12-31 366  74 
200034 34 2000 12 31 6 13.3 128.8 TS 2000-12-31 366  74 
200034 34 2000 12 31 12 13.9 129.7 TS 2000-12-31 366  74 
200034 34 2000 12 31 18 14.4 130.6 TS 2000-12-31 366  74 

質問:私は私のコードでは、うるう年を考慮するにはどうすればよい

どのようにすればいいですか?

多くのおかげで、

+0

_pentad_の定義は、うるう年について何と言っていますか? 2月29日は落ちるのですか?あるいは、2月29日から3月1日までをカバーするPentad 12は、5日ではなく6日で構成されますか? – Uwe

+0

@UweBlock。あなたは正しいです。うるう年の場合、Pentad 12は通常の5日間ではなく6日間です。 Pentadは重複しない平均を意味する。 – ichabod

+0

今、うるう年のペンタッドの定義が明確になっているので、ペンタッドの開始日のリストを1年間取得し、データのフルタイムスパンをカバーする2番目のリストを作成し、 'cut( ) 'を実行します。 – Uwe

答えて

1

マイナー調整は:

library(lubridate) 
dat$pentad = ceiling((dat$yday - leap_year(dat$Year)*(dat$yday > 59))/5) 
+1

コードは共通の年である1900年には失敗することに注意してください。 'lubridate :: leap_year()'を使うことをお勧めします。 – Uwe

+0

@UweBlock。あなたの提案をありがとう。私はそれを試みます。 – ichabod

関連する問題