我正在尝试从美国的全球循环模型 (GCM) 中计算最大值、最小值和平均值。2026-2045 和 2081-2100 的数据以 3 小时为单位。
样本数据:
tmp1 <- structure(list(FIPS = c(1001L, 1003L, 1005L), X2026.01.01.1 = c(285.5533142,
285.5533142, 286.2481079), X2026.01.01.2 = c(283.4977112, 283.4977112,
285.0860291), X2026.01.01.3 = c(281.9733887, 281.9733887, 284.1548767
), X2026.01.01.4 = c(280.0234985, 280.0234985, 282.6075745),
X2026.01.01.5 = c(278.7125854, 278.7125854, 281.2553711),
X2026.01.01.6 = c(278.5204773, 278.5204773, 280.6148071)), .Names = c("FIPS",
"X2026.01.01.1", "X2026.01.01.2", "X2026.01.01.3", "X2026.01.01.4",
"X2026.01.01.5", "X2026.01.01.6"), class = "data.frame", row.names = c(NA,
-3L))
我已经通过 FIPS 代码提取了数据,并使用melt()
;重塑了年度数据文件。
for (i in filelist) {
tmp1 <- as.data.table(read.csv(i,header=T, sep=","))
tmp2 <- melt(tmp1, id="FIPS")
tmp2$year <- as.numeric(substr(tmp2$variable,2,5))
tmp2$month <- as.numeric(substr(tmp2$variable,7,8))
tmp2$day <- as.numeric(substr(tmp2$variable,10,11))
}
我使用以下代码添加了日期字符串和工作日:
插入日期变量
tmp2$date <- with(tmp2, ymd(sprintf('%04d%02d%02d', year, month, day)))
插入日变量
tmp2$day <- weekdays(as.Date(tmp2$date))
sample.tmp2 <- "FIPS xdate temp year month day date dates weekdays
+ 5599311 1003 X2045.08.14.2 304.5995 2045 8 Monday 2045-08-14 2036-01-29 2
+ 468406 39093 X2045.01.19.7 267.8483 2045 1 Thursday 2045-01-19 2028-06-04 0
+ 5022078 21167 X2045.07.21.8 314.6772 2045 7 Friday 2045-07-21 2035-09-13 4
+ 186822 9005 X2045.01.08.5 269.0803 2045 1 Sunday 2045-01-08 2037-06-28 0
+ 3998678 13295 X2045.06.10.7 307.2408 2045 6 Saturday 2045-06-10 2033-10-13 4"
Data <- read.table(text=sample.tmp2, header = TRUE)
我的目标是将这些 3 小时一次的块聚合为每周数据,但是 GCM 数据并不一致,块在 7 到 8 之间变化。我想将数据剪辑为从 2026 年的第一个星期一开始到最后一个星期日结束2045,然后使用 rep() 为整个纪元分配周数。
我知道我可以用这样的东西来计算每天的次数;
length(which(weekdays == '0'))
其中 0、1、2...、6 代表星期日、星期一、...
我的问题是我在尝试聚合数据时做错了什么?但重要的是,我将不胜感激将数据集剪辑为从第一个星期一开始到最后一个星期日结束。非常感谢!