2024年までのpdfファイルはこちらからダウンロード(6,115 KB)
2024.pdf
Format and storage mode:
カンマ区切りASCIIファイル、圧縮なし
Header information:
行タイトルと内容は以下の表の通り
Variable name | Variable definition | Unit | Storage type | Precision |
---|---|---|---|---|
DateTime | 年月日 時刻、10分インターバル | N/A | YYYY/MM/DD hh:mm | 10min |
SoilTemp5cm | 地温5cm深 | ℃ | Real number | 0.1 |
SoilTemp15cm | 地温15cm深 | ℃ | Real number | 0.1 |
AirTemp | 気温 | ℃ | Real number | 0.1 |
RH | 相対湿度 | % | Real number | 0.1 |
W_dir_16 | 風向16方位 | N/A | Character | N/A |
W_speed | 風速 | m/s | Real number | 0.1 |
RainCount | 転倒マスカウント数(0.5mm転倒マスの転倒数相当に変換している場合がある) | 回 | Real number | 0.1 |
SolarRad | 日照 | Kw/m^2 | Real number | 0.01 |
W_dir | 風向360° | ° | Real number | 0.1 |
欠測値コード: “NA”
上記の全てをまとめてダウンロード(245ファイルの圧縮ファイル、146,748
KB)
1997_2024.zip
# パッケージの読み込み
library(dplyr)
library(lubridate)
library(ggplot2)
library(scales)
library(clipr)
# 転倒マスは1転倒0.5mmなので、RainCount×0.5mm、横川2023年の場合
<- mutate(Yoko2023, Rain = RainCount * 0.5) d
# 集計の例、関数は適当に変えてください。
## 日次の集計、平均地温、平均気温、平均湿度、最大風速、降水量合計、日照合計
%>%
d group_by(date=date(d$DateTime)) %>%
summarize(SoilTemp5cm=mean(SoilTemp5cm, na.rm=T),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=T),
AirTemp=mean(AirTemp, na.rm=T),
RelativeHumidity=mean(RH, na.rm=T),
WindSpeed=max(W_speed, na.rm=T),
Rain=sum(Rain, na.rm=T),
SolarRadiation=sum(SolarRad, na.rm=T)
)
## 月次の集計、平均地温、平均気温、平均湿度、最大風速、降水量合計、日照合計
%>%
d group_by(month=month(d$DateTime)) %>%
summarize(SoilTemp5cm=mean(SoilTemp5cm, na.rm=T),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=T),
AirTemp=mean(AirTemp, na.rm=T),
RelativeHumidity=mean(RH, na.rm=T),
WindSpeed=max(W_speed, na.rm=T),
Rain=sum(Rain, na.rm=T),
SolarRadiation=sum(SolarRad, na.rm=T)
)
## 年次の集計、平均地温、平均気温、平均湿度、最大風速、降水量合計、日照合計
%>%
d group_by(year=year(d$DateTime)) %>%
summarize(SoilTemp5cm=mean(SoilTemp5cm, na.rm=T),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=T),
AirTemp=mean(AirTemp, na.rm=T),
RelativeHumidity=mean(RH, na.rm=T),
WindSpeed=max(W_speed, na.rm=T),
Rain=sum(Rain, na.rm=T),
SolarRadiation=sum(SolarRad, na.rm=T)
)
# 年集計をd1に読み込ませた上で、クリップボードにコピーする
= d %>%
d1 group_by(year=year(d$DateTime)) %>%
summarize(SoilTemp5cm=mean(SoilTemp5cm, na.rm=T),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=T),
AirTemp=mean(AirTemp, na.rm=T),
RelativeHumidity=mean(RH, na.rm=T),
WindSpeed=max(W_speed, na.rm=T),
Rain=sum(Rain, na.rm=T),
SolarRadiation=sum(SolarRad, na.rm=T)
)
write.table(d1, "clipboard", sep="\t", row.names=FALSE, col.names=TRUE)
# 貼り付け Ctrl+v
# 気温(赤)、地温5cm(青)、地温15cm(緑)のプロット
ggplot(d=Yoko2023)+
geom_line(aes(x=DateTime, y=AirTemp), color="red")+
geom_line(aes(x=DateTime, y=SoilTemp5cm), color="blue")+
geom_line(aes(x=DateTime, y=SoilTemp15cm), color="green")+
scale_x_datetime(breaks="1 month", minor_breaks="1 week", date_labels="%m/%d")+
ylim(-30, 50)+
theme_bw()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# 日照のプロット
ggplot(d=Yoko2023)+
geom_line(aes(x=DateTime, y=SolarRad), color="gold")+
scale_x_datetime(breaks="1 month", minor_breaks="1 week", date_labels="%m/%d")+
ylim(-1, 2)+
theme_bw()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
library(tidyverse)
library(lubridate)
library(gt)
# 以下は横川の例です。他の観測所は1行目の"Site"の右側を変更してください。
# 横川:Yoko、見晴:Miha、苗畑:Nae、大谷山:Oya、唐沢山:Kara、秩父:Chic
# 3行目のパスは変更してください
<- "Yoko"
Site for (this_year in 1997:1997) {
= paste0("C:/Users/.../My Documents/気象月報/csv/年報採用/", Site, this_year, ".csv")
file_path <- read.csv(file_path, stringsAsFactors = FALSE)
data # POSIXctに変換
$DateTime <- as.POSIXct(data$DateTime, format='%Y/%m/%d %H:%M')
data
# データフレームを環境に保存
assign(paste0(Site, this_year), data)
}
# 他の観測所にするときは1行目のSiteの右側を変更してください。
# 横川:Yoko、見晴:Miha、苗畑:Nae、大谷山:Oya、唐沢山:Kara、秩父:Chic
# 下から9行目の表タイトルの観測所名を変更してください。
<- "Chic"
Site = paste0("C:/Users/.../My Documents/気象月報/気象報告Markdown/AR/general_", Site, ".html")
file_path
##### 全データを繋げて一つのデータフレームを作成する
<- data.frame()
d for (this_year in 1997:2024) {
<- get(paste0(Site, this_year))
df <- rbind(d, df)
d
}
# dfをメモリから削除する
rm(df)
# 転倒マスは1転倒0.5mmなので、RainCount×0.5mm
<- d %>%
d mutate(Rain = RainCount * 0.5)
##### 日次の集計、気温(Ave, Max, Min)湿度(Ave, Max, Min)、最大風速・風向(最大風速が0の時の風向を空白にする)、日照合計、降水量合計、地温5cm(平均)、地温15cm(平均)
<- d %>%
d1 group_by(date=date(DateTime)) %>%
reframe(
AirTempAve=mean(AirTemp, na.rm=FALSE),
AirTempMax=max(AirTemp, na.rm=FALSE),
AirTempMin=min(AirTemp, na.rm=FALSE),
RHAve=mean(RH, na.rm=FALSE),
RHMax=max(RH, na.rm=FALSE),
RHMin=min(RH, na.rm=FALSE),
WindSpeedMax=max(W_speed, na.rm=FALSE),
WindDirAtMax = ifelse(all(is.na(W_dir_16[which.max(W_speed)])), NA, first(W_dir_16[which.max(W_speed)])),
SolarRadiation=sum(SolarRad, na.rm=FALSE),
Rain=sum(Rain, na.rm=FALSE),
SoilTemp5cm=mean(SoilTemp5cm, na.rm=FALSE),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=FALSE)
)
##### 年集計
<- d1 %>%
d3 group_by(year=year(date)) %>%
reframe(
AirTempAve= if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", mean(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempAve, na.rm = TRUE))),
AirTempMax= if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", max(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMax, na.rm = TRUE))),
AirTempMin= if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", min(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMin, na.rm = TRUE))),
RHAve= if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", mean(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHAve, na.rm = TRUE))),
RHMax= if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", max(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMax, na.rm = TRUE))),
RHMin= if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", min(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMin, na.rm = TRUE))),
WindSpeedMax= if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", sum(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", sum(Rain, na.rm = TRUE))),
SoilTemp5cm= if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm= if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)))
)
# 年に各年のhtmlを追加しデータフレームを整える
<- d3 %>%
d4 mutate(YearLink = paste0('<a href="annual_', Site, '_', year, '.html">', year, '年</a>')) %>%
mutate(YearLink = map(YearLink, gt::html)) %>%
select(YearLink, AirTempAve, AirTempMax, AirTempMin, RHAve, RHMax, RHMin, WindSpeedMax, Rain, SoilTemp5cm, SoilTemp15cm)
##### 表作成
<- d4 %>%
table gt() %>%
cols_label(
YearLink="年",
AirTempAve=html("気温℃<br>平均"),
AirTempMax=html("気温℃<br>最高"),
AirTempMin=html("気温℃<br>最低"),
RHAve=html("湿度%<br>平均"),
RHMax=html("湿度%<br>最大"),
RHMin=html("湿度%<br>最小"),
WindSpeedMax=html("最大風速<br>m/s"),
Rain=html("降水量<br>mm"),
SoilTemp5cm=html("平均地温<br>5cm"),
SoilTemp15cm=html("平均地温<br>15cm"),
%>%
) cols_align(align = "center", columns = everything()) %>%
tab_header(
title=html(paste0("<div style='text-align: left;'> FM秩父</div>")),
subtitle=html("<div style='text-align: left;'>集計期間内に欠損値NAが含まれる場合には、*が付与される。</div>")
)
# HTMLファイルの保存
gtsave(table, filename = file_path)
# 作業用データフレームの削除
rm(d, d1, d3, d4)
# 他の観測所にするときは1行目のSiteの右側を変更してください。
# 横川:Yoko、見晴:Miha、苗畑:Nae、大谷山:Oya、唐沢山:Kara、秩父:Chic
# 下から8行目の表タイトルの観測所名を変更してください。
= "Chic"
Site for (this_year in 1997:2024) {
= paste0("C:/Users/.../My Documents/気象月報/気象報告Markdown/AR/annual_", Site, "_", this_year, ".html")
file_path
# 転倒マスは1転倒0.5mmなので、RainCount×0.5mm
= get(paste0(Site, this_year)) %>% mutate(Rain = RainCount * 0.5)
d
##### 日次の集計、気温(Ave, Max, Min)湿度(Ave, Max, Min)、最大風速・風向(最大風速が0の時の風向を空白にする)、日照合計、降水量合計、地温5cm(平均)、地温15cm(平均)
=d %>%
d1group_by(date=date(DateTime)) %>%
reframe(
AirTempAve=mean(AirTemp, na.rm=FALSE),
AirTempMax=max(AirTemp, na.rm=FALSE),
AirTempMin=min(AirTemp, na.rm=FALSE),
RHAve=mean(RH, na.rm=FALSE),
RHMax=max(RH, na.rm=FALSE),
RHMin=min(RH, na.rm=FALSE),
WindSpeedMax=max(W_speed, na.rm=FALSE),
WindDirAtMax = ifelse(all(is.na(W_dir_16[which.max(W_speed)])), NA, first(W_dir_16[which.max(W_speed)])),
SolarRadiation=sum(SolarRad, na.rm=FALSE),
Rain=sum(Rain, na.rm=FALSE),
SoilTemp5cm=mean(SoilTemp5cm, na.rm=FALSE),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=FALSE)
)
##### ブランク行の作成
= data.frame(
blank_row AirTempAve = "",
AirTempMax = "",
AirTempMin = "",
RHAve = "",
RHMax = "",
RHMin = "",
WindSpeedMax = "",
Rain = "",
SoilTemp5cm = "",
SoilTemp15cm = "",
month = "",
stringsAsFactors = FALSE # 因子型を避ける
)
##### 月集計、1~12月
# 1月~12月までループ
for (m in 1:12) {
= d1 %>%
d2_sum filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve="",
AirTempMax="",
AirTempMin="",
RHAve="",
RHMax="",
RHMin="",
WindSpeedMax="",
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", sum(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", sum(Rain, na.rm = TRUE))),
SoilTemp5cm="",
SoilTemp15cm=""
)
= d1 %>%
d2_mean filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", mean(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", mean(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", mean(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", mean(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", mean(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", mean(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", mean(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", mean(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)))
)
= d1 %>%
d2_max filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", max(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", max(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", max(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", max(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", max(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", max(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", max(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", max(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", max(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", max(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", max(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", max(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", max(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", max(SoilTemp15cm, na.rm = TRUE)))
)
= d1 %>%
d2_min filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", min(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", min(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", min(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", min(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", min(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", min(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", min(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", min(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", min(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", min(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", min(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", min(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", min(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", min(SoilTemp15cm, na.rm = TRUE)))
)
= rbind(d2_sum, d2_mean, d2_max, d2_min, blank_row)
d2
# 月と各行のタイトルを追加
= d2 %>%
d2 mutate(
MonthYear = c(paste0('<a href="monthly_', Site, '_', this_year, '_', m, '.html">', m, '月</a>'), '', '', '', ''),
Item = c("合計","平均","最大","最小","")) %>%
select(MonthYear, Item, AirTempAve, AirTempMax, AirTempMin, RHAve, RHMax, RHMin, WindSpeedMax, Rain, SoilTemp5cm, SoilTemp15cm)
# 個別のデータフレームとして保存
assign(paste0("d2_", m), d2, envir = .GlobalEnv)
}
##### 年集計
= d1 %>%
d3_sum group_by(year=year(date)) %>%
reframe(
AirTempAve="",
AirTempMax="",
AirTempMin="",
RHAve="",
RHMax="",
RHMin="",
WindSpeedMax="",
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", sum(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", sum(Rain, na.rm = TRUE))),
SoilTemp5cm="",
SoilTemp15cm=""
)
= d1 %>%
d3_mean group_by(year=year(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", mean(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", mean(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", mean(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", mean(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", mean(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", mean(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", mean(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", mean(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)))
)
= d1 %>%
d3_max group_by(year=year(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", max(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", max(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", max(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", max(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", max(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", max(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", max(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", max(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", max(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", max(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", max(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", max(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", max(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", max(SoilTemp15cm, na.rm = TRUE)))
)
= d1 %>%
d3_min group_by(year=year(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", min(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", min(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", min(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", min(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", min(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", min(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", min(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", min(WindSpeedMax, na.rm = TRUE))),
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", min(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", min(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", min(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", min(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", min(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", min(SoilTemp15cm, na.rm = TRUE)))
)
= rbind(d3_sum, d3_mean, d3_max, d3_min)
d3
# 年と各行のタイトルを追加
= d3 %>%
d3 mutate(
MonthYear = c(paste(year(d1$date[1]), "年"),"","",""),
Item = c("合計","平均","最大","最小")) %>%
select(MonthYear, Item, AirTempAve, AirTempMax, AirTempMin, RHAve, RHMax, RHMin, WindSpeedMax, Rain, SoilTemp5cm, SoilTemp15cm)
##### 表作成
# 月集計と年集計を繋げる
= rbind(d2_1, d2_2, d2_3, d2_4, d2_5, d2_6, d2_7, d2_8, d2_9, d2_10, d2_11, d2_12, d3)
d4
# 表の作成
= d4 %>%
table mutate(MonthYear = map(MonthYear, gt::html)) %>%
gt() %>%
cols_label(
MonthYear="",
Item="",
AirTempAve=html("気温℃<br>平均"),
AirTempMax=html("気温℃<br>最高"),
AirTempMin=html("気温℃<br>最低"),
RHAve=html("湿度%<br>平均"),
RHMax=html("湿度%<br>最大"),
RHMin=html("湿度%<br>最小"),
WindSpeedMax=html("最大風速<br>m/s"),
Rain=html("降水量<br>mm"),
SoilTemp5cm=html("平均地温<br>5cm"),
SoilTemp15cm=html("平均地温<br>15cm"),
%>%
) cols_align(align = "center", columns = everything()) %>%
tab_header(
title=html(paste0("<div style='text-align: left;'>", this_year, "年 気象年報 FM秩父</div>")),
subtitle=html("<div style='text-align: left;'>集計期間内に欠損値NAが含まれる場合には、*が付与される。</div>")
)
# HTMLファイルの保存
gtsave(table, filename = file_path)
}
# 他の観測所にするときは1行目のSiteの右側を変更してください。
# 横川:Yoko、見晴:Miha、苗畑:Nae、大谷山:Oya、唐沢山:Kara、秩父:Chic
# 下から4行目の表タイトルの観測所名を変更してください。
= "Chic"
Site for (this_year in 1997:2024) {
# 転倒マスは1転倒0.5mmなので、RainCount×0.5mm
= get(paste0(Site, this_year)) %>% mutate(Rain = RainCount * 0.5)
d
##### 日次の集計、気温(Ave, Max, Min)湿度(Ave, Max, Min)、最大風速・風向(最大風速が0の時の風向を空白にする)、降水量合計、地温5cm(平均)、地温15cm(平均)、(日照は無し)
=d %>%
d1group_by(date=date(DateTime)) %>%
reframe(
AirTempAve=mean(AirTemp, na.rm=FALSE),
AirTempMax=max(AirTemp, na.rm=FALSE),
AirTempMin=min(AirTemp, na.rm=FALSE),
RHAve=mean(RH, na.rm=FALSE),
RHMax=max(RH, na.rm=FALSE),
RHMin=min(RH, na.rm=FALSE),
WindSpeedMax=max(W_speed, na.rm=FALSE),
WindDirAtMax = ifelse(all(is.na(W_dir_16[which.max(W_speed)])), NA, first(W_dir_16[which.max(W_speed)])),
Rain=sum(Rain, na.rm=FALSE),
SoilTemp5cm=mean(SoilTemp5cm, na.rm=FALSE),
SoilTemp15cm=mean(SoilTemp15cm, na.rm=FALSE)
)
##### 月集計、1~12月
# 1月~12月までループ
for (m in 1:12) {
= paste0("C:/Users/.../My Documents/気象月報/気象報告Markdown/AR/monthly_", Site, "_", this_year, "_", m, ".html")
file_path
= d1 %>%
d2_daily filter(month(date) == m) %>%
mutate(DateItem = day(date)) %>%
reframe(
DateItem=DateItem,
AirTempAve=sprintf("%.1f", AirTempAve),
AirTempMax=sprintf("%.1f", AirTempMax),
AirTempMin=sprintf("%.1f", AirTempMin),
RHAve=sprintf("%.1f", RHAve),
RHMax=sprintf("%.1f", RHMax),
RHMin=sprintf("%.1f", RHMin),
WindSpeedMax=sprintf("%.2f", WindSpeedMax),
WindDirAtMax=WindDirAtMax,
Rain=sprintf("%.1f", Rain),
SoilTemp5cm=sprintf("%.1f", SoilTemp5cm),
SoilTemp15cm=sprintf("%.1f", SoilTemp15cm)
)
= d1 %>%
d2_sum filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve="",
AirTempMax="",
AirTempMin="",
RHAve="",
RHMax="",
RHMin="",
WindSpeedMax="",
WindDirAtMax="",
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", sum(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", sum(Rain, na.rm = TRUE))),
SoilTemp5cm="",
SoilTemp15cm=""
%>%
) mutate(DateItem = "月合計") %>%
select(DateItem, everything(), -month)
= d1 %>%
d2_mean filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", mean(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", mean(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", mean(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", mean(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", mean(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", mean(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", mean(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", mean(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", mean(WindSpeedMax, na.rm = TRUE))),
WindDirAtMax="",
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", mean(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", mean(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", mean(SoilTemp15cm, na.rm = TRUE)))
%>%
) mutate(DateItem = "月平均") %>%
select(DateItem, everything(), -month)
= d1 %>%
d2_max filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", max(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", max(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", max(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", max(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", max(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", max(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", max(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", max(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", max(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", max(WindSpeedMax, na.rm = TRUE))),
WindDirAtMax="",
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", max(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", max(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", max(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", max(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", max(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", max(SoilTemp15cm, na.rm = TRUE)))
%>%
) mutate(DateItem = "月最大") %>%
select(DateItem, everything(), -month)
= d1 %>%
d2_min filter(month(date) == m) %>%
group_by(month=month(date)) %>%
reframe(
AirTempAve = if_else(any(is.na(AirTempAve)), paste0(sprintf("%.1f", min(AirTempAve, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempAve, na.rm = TRUE))),
AirTempMax = if_else(any(is.na(AirTempMax)), paste0(sprintf("%.1f", min(AirTempMax, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMax, na.rm = TRUE))),
AirTempMin = if_else(any(is.na(AirTempMin)), paste0(sprintf("%.1f", min(AirTempMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(AirTempMin, na.rm = TRUE))),
RHAve = if_else(any(is.na(RHAve)), paste0(sprintf("%.1f", min(RHAve, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHAve, na.rm = TRUE))),
RHMax = if_else(any(is.na(RHMax)), paste0(sprintf("%.1f", min(RHMax, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMax, na.rm = TRUE))),
RHMin = if_else(any(is.na(RHMin)), paste0(sprintf("%.1f", min(RHMin, na.rm = TRUE)), " *"), sprintf("%.1f", min(RHMin, na.rm = TRUE))),
WindSpeedMax = if_else(any(is.na(WindSpeedMax)), paste0(sprintf("%.2f", min(WindSpeedMax, na.rm = TRUE)), " *"), sprintf("%.2f", min(WindSpeedMax, na.rm = TRUE))),
WindDirAtMax="",
Rain = if_else(any(is.na(Rain)), paste0(sprintf("%.1f", min(Rain, na.rm = TRUE)), " *"), sprintf("%.1f", min(Rain, na.rm = TRUE))),
SoilTemp5cm = if_else(any(is.na(SoilTemp5cm)), paste0(sprintf("%.1f", min(SoilTemp5cm, na.rm = TRUE)), " *"), sprintf("%.1f", min(SoilTemp5cm, na.rm = TRUE))),
SoilTemp15cm = if_else(any(is.na(SoilTemp15cm)), paste0(sprintf("%.1f", min(SoilTemp15cm, na.rm = TRUE)), " *"), sprintf("%.1f", min(SoilTemp15cm, na.rm = TRUE)))
%>%
) mutate(DateItem = "月最小") %>%
select(DateItem, everything(), -month)
= rbind(d2_daily, d2_sum, d2_mean, d2_max, d2_min)
d2
##### 表作成
= d2 %>%
table gt() %>%
cols_label(
DateItem="日",
AirTempAve=html("気温℃<br>平均"),
AirTempMax=html("気温℃<br>最高"),
AirTempMin=html("気温℃<br>最低"),
RHAve=html("湿度%<br>平均"),
RHMax=html("湿度%<br>最大"),
RHMin=html("湿度%<br>最小"),
WindSpeedMax=html("最大風速<br>m/s"),
WindDirAtMax=html("最大時<br>風向"),
Rain=html("降水量<br>mm"),
SoilTemp5cm=html("平均地温<br>5cm"),
SoilTemp15cm=html("平均地温<br>15cm"),
%>%
) cols_align(align = "center", columns = everything()) %>%
tab_header(
title=html(paste0("<div style='text-align: left;'>", this_year, "年", m, "月 FM秩父</div>"))
)
# HTMLファイルの保存
gtsave(table, filename = file_path)
} }
お問い合わせはこちら