米国の地球循環モデル (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 は日曜日、月曜日、...を表します。
私の質問は、そもそもデータを集計しようとして何か間違ったことをしているのでしょうか? しかし重要なのは、データセットを最初の月曜日に開始し、最後の日曜日に終了するようにクリップするための助けに感謝することです. どうもありがとうございました!