基于pentad日期的子集数据与闰年

时间:2016-12-19 08:40:04

标签: r subset stringr posixlt

我正在尝试通过五元组日期对以下数据进行子集化。 Pentad意味着5天平均不重叠。对于闰年,Pentad 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包含每个pentad的数据帧。

我做了以下检查:

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

问题:

  1. 如何在代码中说明闰年?
  2. 任何人都可以建议我该怎么做?

    非常感谢,

1 个答案:

答案 0 :(得分:1)

小调整:

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