基于具有闰年的五元日期的子集数据
Subset data based on pentad dates with leap year
我正在尝试按五元日期对以下数据进行子集化。 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
问题:
- 如何在我的代码中计算闰年?
任何人都可以建议我该怎么做吗?
非常感谢,
微调:
library(lubridate)
dat$pentad = ceiling( (dat$yday - leap_year(dat$Year)*(dat$yday > 59)) / 5 )
我正在尝试按五元日期对以下数据进行子集化。 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
问题:
- 如何在我的代码中计算闰年?
任何人都可以建议我该怎么做吗?
非常感谢,
微调:
library(lubridate)
dat$pentad = ceiling( (dat$yday - leap_year(dat$Year)*(dat$yday > 59)) / 5 )