I have seen examples of using lapply across columns, but not one that considers (1) a timestamp (2) groups based on timestamp (3) detects when values change
I'm looking for a way to do the follow for an arbitrary number of Panels
per Sensor
(there could be Panel 3
, Panel 4
, etc.):
- for each
year
,month
,hour
, I'm looking for thesum
andCounts Turn On
which is a count of the # times a value changes from 0 to a non zero number. To simplify, non-zero values at the start of thehour
should not be counted towards this value (even if the previous value is 0).
take the df
:
cols <- c("Timestamp","1000 Sensor 2 Panel 1","1000 Sensor 2 Panel 2")
tstmp <- seq(as.POSIXct("2018-08-13 00:00:00", tz="US/Eastern"),
as.POSIXct("2018-08-13 03:30:00", tz="US/Eastern"),
by="15 min") %>% as.data.frame()
stage1 <- c(rep(c(0,.7,1),5)) %>% as.data.frame()
stage2 <- c(0,1,rep(c(0,.5),5),0,1,1) %>% as.data.frame()
df = cbind(tstmp,stage1,stage2)
colnames(df) = cols
I'd like the result to be results_1
:
ID Year Month Hour Sum Count Turn On
1000 Sensor 2 Panel 1 2018 8 0 1.7 1
1000 Sensor 2 Panel 1 2018 8 1 2.4 1
1000 Sensor 2 Panel 1 2018 8 2 2.7 1
1000 Sensor 2 Panel 1 2018 8 3 1.7 1
1000 Sensor 2 Panel 2 2018 8 0 1.5 2
1000 Sensor 2 Panel 2 2018 8 1 1 2
1000 Sensor 2 Panel 2 2018 8 2 1 2
1000 Sensor 2 Panel 2 2018 8 3 2 1
For those more ambitious, I'd like to see a solution that is able to determine whether the last reading in the previous hour was 0 and the first reading in the next hour is non-zero, and is able to count that towards Count Turns On
-- the solution would look like below in results_advanced
:
ID Year Month Hour Sum Count Turn On
1000 Sensor 2 Panel 1 2018 8 0 1.7 1
1000 Sensor 2 Panel 1 2018 8 1 2.4 2
1000 Sensor 2 Panel 1 2018 8 2 2.7 1
1000 Sensor 2 Panel 1 2018 8 3 1.7 1
1000 Sensor 2 Panel 2 2018 8 0 1.5 2
1000 Sensor 2 Panel 2 2018 8 1 1 2
1000 Sensor 2 Panel 2 2018 8 2 1 2
1000 Sensor 2 Panel 2 2018 8 3 2 1
I'd like a solution for at least results_1
, but would appreciate solutions for both results_1
and results_advanced
. Please provide any detail you can as to your thought process and this will help me (and others) learn more.
I believe there are both data.table
and dplyr
solutions so I'll tag both.