read_dam5_file <- function(path,
region_id = 1:32,
start_datetime = -Inf,
stop_datetime = +Inf,
tz = "UTC"){
# todo check whether region has duplicates/ is in range
regions <- region_id
start_datetime <- damr:::parse_datetime(start_datetime, tz = tz)
stop_datetime <- damr:::parse_datetime(stop_datetime, tz = tz)
first_last_lines <- damr:::find_dam2_first_last_lines(path,
start_datetime,
stop_datetime,
tz)
first_line = first_last_lines$id[1]
last_line = first_last_lines$id[2]
col_types = do.call(readr::cols_only, DAM5_COLS)
# todo we do not have to read all regions and when filter.
# We can already load only the channels we want here.
df <-readr::read_tsv(path, col_names = names(DAM5_COLS),
col_types = col_types,
skip = first_line-1,
n_max = last_line-first_line+1,
progress = F)
return(df)
# return(start_datetime)
df <- as.data.table(df)
df <- df[, datetime := paste(date,time, sep=" ")]
suppressWarnings(
df <- df[, datetime_posix := as.POSIXct(strptime(datetime,"%d %b %y %H:%M:%S",tz=tz))]
)
df[, datetime := NULL]
setnames(df, "datetime_posix", "datetime")
# if start date is not defined, t0 is the first read available, whether or not is is valid!
if(is.infinite(start_datetime))
t0 = df$datetime[1]
else
t0 = start_datetime
experiment_id <- paste(format(t0, format = "%F %T"), basename(path),sep="|")
df <- df[status == 1]
df <- unique(df, by="datetime")
df <- df[, (colnames(df) %like% "(channel)|(datetime)"), with=F]
setnames(df,
grep("channel_", colnames(df), value = T),
gsub("channel_", "0", grep("channel_", colnames(df), value = T)))
df <- melt(df, id="datetime", variable.name = "channel", value.name = "activity")
dt <- df[ ,. (id = as.factor(sprintf("%s|%02d",experiment_id, as.integer(channel))),
region_id = as.integer(channel),
t = as.numeric(datetime-t0, units = "secs"),
activity=activity)]
setkeyv(dt, "id")
dt <- dt[region_id %in% regions]
meta <- unique(dt[, c("id","region_id")],by="id")
meta[,experiment_id := experiment_id]
meta[,start_datetime := t0]
file_info <- meta[,.(file_info = list(list(path = path, file = basename(path)))), by="id"]
meta <- file_info[meta]
#meta <- met[,file:=basename(path)]
dt[,region_id:=NULL]
behavr::behavr(dt,meta)
}
path <- "./tests/testthat/M30_DAM5.txt"
start_datetime = -Inf
stop_datetime = +Inf
tz = "UTC"
start_datetime <- damr:::parse_datetime(start_datetime, tz = tz)
stop_datetime <- damr:::parse_datetime(stop_datetime, tz = tz)
first_last_lines <- damr:::find_dam_first_last_lines(path,
start_datetime,
stop_datetime,
tz)
start_datetime = "2017-12-21 18:00:00"
stop_datetime = "2017-12-21 20:00:00"
start_datetime <- damr:::parse_datetime(start_datetime, tz = tz)
stop_datetime <- damr:::parse_datetime(stop_datetime, tz = tz)
first_last_lines <- damr:::find_dam_first_last_lines(path,
start_datetime,
stop_datetime,
tz)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.