我正在尝试通过五元组日期对以下数据进行子集化。 Pentad意味着5天平均不重叠。对于闰年,Pentad 12包括2月29日(平均6天而不是5天):
这是我的代码:
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
问题:
任何人都可以建议我该怎么做?
非常感谢,
答案 0 :(得分:1)
小调整:
library(lubridate)
dat$pentad = ceiling( (dat$yday - leap_year(dat$Year)*(dat$yday > 59)) / 5 )