-
Notifications
You must be signed in to change notification settings - Fork 1
/
make_daily.r
34 lines (32 loc) · 1.15 KB
/
make_daily.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# convert hourly weather into daily format
library(data.table)
library(lubridate)
source("util.r")
#' Convert hourly values stream to daily noon values stream.
#'
#' @param df hourly values weather stream [lat, long, yr, mon, day, hr, temp, rh, ws, prec]
#' @return daily noon values weather stream [lat, long, yr, mon, day, hr, temp, rh, ws, prec]
#' @export hourly_to_daily
hourly_to_daily <- function(df) {
df <- data.table(df)
df[, DATE := as_date(sprintf("%4d-%02d-%02d", yr, mon, day))]
df[, FOR_DATE := as_date(ifelse(hr <= 12, DATE, DATE + days(1)))]
prec <- df[, list(prec = sum(prec, na.rm = TRUE)), by = c("FOR_DATE")]
df <- df[hr == 12, -c("prec")]
df <- merge(df, prec, by = c("FOR_DATE"))[, -c("hr", "DATE", "FOR_DATE")]
names(df) <- tolower(names(df))
return(df)
}
# so this can be run via Rscript
if ("--args" %in% commandArgs()) {
args <- commandArgs(trailingOnly = TRUE)
if (2 == length(args)) {
inp <- args[1]
out <- args[2]
df <- as.data.table(read.csv(inp))
df_daily <- hourly_to_daily(df)
save_csv(df_daily, out)
} else {
message("Wrong number of arguments")
}
}