Finding the maximum in an xts column within the last X hrs

128 Views Asked by At

I have a dataset within a reactive dygraph that looks like this:

data()$data.o

date data.o
2022-07-21 12:10 AM 400.1
2022-07-21 12:11 AM 33.9
2022-07-21 12:12 AM 32.5
2022-07-21 12:13 AM 35.1
2022-07-21 12:14 AM 31.5
2022-07-21 12:15 AM 39.5

I want to find the max value in the last 5 minutes so I can set my axis scale accordingly.

I've tried:

enddate = max(data()$date)
startdate = enddate - (60*5)
oMx <- max(datao.xts[startdate/enddate], na.rm = T)

But I get an error using datao.xts.

Is there a better way to go about this?

Edit:

Trying on a larger dataset for the last 480 minutes, returns -inf:

xts <- xts::xts(hvilleo, order.by = data()$date)
enddate <- end(xts) startdate <- enddate - (480-1) * 60
xts[paste0(startdate, enddate, sep = "/")] |> max(na.rm = TRUE) xts |>
utils::tail(480) |> max(na.rm =TRUE)
1

There are 1 best solutions below

13
dimfalk On BEST ANSWER

As far as I'm familiar with xts, your startdate/enddate part has simply to be a string, c.f. Joshua's response here. That's it.

# allow me to create an xts object beforehand
datetimes <- c("2022-07-21 12:10 AM",
               "2022-07-21 12:11 AM",
               "2022-07-21 12:12 AM",
               "2022-07-21 12:13 AM",
               "2022-07-21 12:14 AM",
               "2022-07-21 12:15 AM") |> 
  strptime(format = "%Y-%m-%d %I:%M %p") |> 
  as.POSIXct()

data <- c(400.1, 33.9, 32.5, 35.1, 31.5, 39.5)

xts <- xts::xts(data, order.by = datetimes)

# minor adjustments to your approach
enddate <- end(xts)
startdate <- enddate - (5-1) * 60

xts[paste0(startdate, enddate, sep = "/")] |> max()
#> [1] 39.5

# assuming you are interested in the last five observations
xts |> utils::tail(5) |> max()
#> [1] 39.5