Jim Lemon
2022-Jul-19 07:05 UTC
[R] Extract time and state of charge (Start and End) and Count
Hi Roslina, The following gives you the state of charge for the vehicle in your example data for each hour. This is approximate as your times are not on even hours. # get the temporal order of observations obs_order<-order(c(as.numeric(dt_2014$bc_start),as.numeric(dt_2014$bc_stop))) numeric_time<-c(as.numeric(dt_2014$bc_start),as.numeric(dt_2014$bc_stop))[obs_order] nobs<-diff(range(numeric_time))/3600 # find the linear approximation of charge state by hours hourly_SoC<-approx(numeric_time, c(dt_2014$Starting_SoC_of_12,dt_2014$Ending_SoC_of_12)[obs_order],n=nobs) To get the POSIX times: hourly_POSIX<-seq(dt_2014$bc_start[1],dt_2014$bc_stop,length.out=nobs) That will fill part of your table. If you want the state of charge by hour regardless of day, you'll have to create a new "hour" variable from, hourly_POSIX, then: mean_charge_by_hour<-by(hourly_SoC$hour,hourly_SoC$y,mean) #untested since I don't know whether you want this Jim On Mon, Jul 18, 2022 at 2:04 PM roslinazairimah zakaria <roslinaump at gmail.com> wrote:> > Dear all, > > I have data of Battery Electric vehicle (BEV). I would like to extract data > from every hour starting from 0.00 to 0.59, 1:00-1:59 for SOC(state of > charge) start to end. > > Some examples: > I can extract data from SOC=0 and SOC=12 > dt_2014[which(dt_2014$Starting_SoC_of_12==0 & > dt_2014$Ending_SoC_of_12==12),] > > I can extract data from SOC=1 and SOC=12 > dt_2014[which(dt_2014$Starting_SoC_of_12==1 & > dt_2014$Ending_SoC_of_12==12),] > > and I would like to further categorise the data by hour and count how many > cars from 0 state charge to 12 state charge at in that particular hour. > > Thank you so much for any help given. > > Some data > > dput(dt_2014[1:10,]) > structure(list(?..CarID = c("GC10", "GC10", "GC10", "GC10", "GC10", > "GC10", "GC10", "GC10", "GC10", "GC10"), BatteryChargeStartDate > c("16/2/2014 16:05", > "16/2/2014 18:20", "17/2/2014 8:10", "18/2/2014 7:41", "18/2/2014 15:36", > "18/2/2014 16:36", "18/2/2014 21:26", "19/2/2014 8:57", "19/2/2014 21:08", > "20/2/2014 18:11"), BCStartTime = c("16:05", "18:20", "8:10", > "7:41", "15:36", "16:36", "21:26", "8:57", "21:08", "18:11"), > Year = c(2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, > 2014L, 2014L, 2014L), Month = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, > 2L, 2L, 2L), Day = c(16L, 16L, 17L, 18L, 18L, 18L, 18L, 19L, > 19L, 20L), BatteryChargeStopDate = c("16/2/2014 17:05", "16/2/2014 > 19:00", > "17/2/2014 15:57", "18/2/2014 9:52", "18/2/2014 15:39", "18/2/2014 > 17:36", > "19/2/2014 1:55", "19/2/2014 14:25", "20/2/2014 5:17", "20/2/2014 23:20" > ), BCStopTime = c("17:05", "19:00", "15:57", "9:52", "15:39", > "17:36", "1:55", "14:25", "5:17", "23:20"), Year2 = c(2014L, > 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L > ), Month2 = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Day2 = c(16L, > 16L, 17L, 18L, 18L, 18L, 19L, 19L, 20L, 20L), Starting_SoC_of_12 > c(1L, > 2L, 4L, 5L, 4L, 2L, 8L, 8L, 4L, 8L), Ending_SoC_of_12 = c(11L, > 11L, 12L, 8L, 4L, 10L, 12L, 12L, 12L, 12L)), row.names = c(NA, > 10L), class = "data.frame") > > > -- > *Roslinazairimah Zakaria* > *Tel: +609-5492370; Fax. No.+609-5492766* > > *Email: roslinaump at gmail.com <roslinaump at gmail.com>* > University Malaysia Pahang > Lebuhraya Tun Razak, 26300 Gambang, Pahang, Malaysia > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
roslinazairimah zakaria
2022-Jul-19 07:22 UTC
[R] Extract time and state of charge (Start and End) and Count
Jim, Thank you so much! On Tue, Jul 19, 2022 at 3:05 PM Jim Lemon <drjimlemon at gmail.com> wrote:> Hi Roslina, > The following gives you the state of charge for the vehicle in your > example data for each hour. This is approximate as your times are not > on even hours. > > # get the temporal order of observations > > obs_order<-order(c(as.numeric(dt_2014$bc_start),as.numeric(dt_2014$bc_stop))) > > numeric_time<-c(as.numeric(dt_2014$bc_start),as.numeric(dt_2014$bc_stop))[obs_order] > nobs<-diff(range(numeric_time))/3600 > # find the linear approximation of charge state by hours > hourly_SoC<-approx(numeric_time, > c(dt_2014$Starting_SoC_of_12,dt_2014$Ending_SoC_of_12)[obs_order],n=nobs) > > To get the POSIX times: > > hourly_POSIX<-seq(dt_2014$bc_start[1],dt_2014$bc_stop,length.out=nobs) > > That will fill part of your table. If you want the state of charge by > hour regardless of day, you'll have to create a new "hour" variable > from, hourly_POSIX, then: > > mean_charge_by_hour<-by(hourly_SoC$hour,hourly_SoC$y,mean) #untested > since I don't know whether you want this > > Jim > > On Mon, Jul 18, 2022 at 2:04 PM roslinazairimah zakaria > <roslinaump at gmail.com> wrote: > > > > Dear all, > > > > I have data of Battery Electric vehicle (BEV). I would like to extract > data > > from every hour starting from 0.00 to 0.59, 1:00-1:59 for SOC(state of > > charge) start to end. > > > > Some examples: > > I can extract data from SOC=0 and SOC=12 > > dt_2014[which(dt_2014$Starting_SoC_of_12==0 & > > dt_2014$Ending_SoC_of_12==12),] > > > > I can extract data from SOC=1 and SOC=12 > > dt_2014[which(dt_2014$Starting_SoC_of_12==1 & > > dt_2014$Ending_SoC_of_12==12),] > > > > and I would like to further categorise the data by hour and count how > many > > cars from 0 state charge to 12 state charge at in that particular hour. > > > > Thank you so much for any help given. > > > > Some data > > > dput(dt_2014[1:10,]) > > structure(list(?..CarID = c("GC10", "GC10", "GC10", "GC10", "GC10", > > "GC10", "GC10", "GC10", "GC10", "GC10"), BatteryChargeStartDate > > c("16/2/2014 16:05", > > "16/2/2014 18:20", "17/2/2014 8:10", "18/2/2014 7:41", "18/2/2014 15:36", > > "18/2/2014 16:36", "18/2/2014 21:26", "19/2/2014 8:57", "19/2/2014 > 21:08", > > "20/2/2014 18:11"), BCStartTime = c("16:05", "18:20", "8:10", > > "7:41", "15:36", "16:36", "21:26", "8:57", "21:08", "18:11"), > > Year = c(2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, > > 2014L, 2014L, 2014L), Month = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, > > 2L, 2L, 2L), Day = c(16L, 16L, 17L, 18L, 18L, 18L, 18L, 19L, > > 19L, 20L), BatteryChargeStopDate = c("16/2/2014 17:05", "16/2/2014 > > 19:00", > > "17/2/2014 15:57", "18/2/2014 9:52", "18/2/2014 15:39", "18/2/2014 > > 17:36", > > "19/2/2014 1:55", "19/2/2014 14:25", "20/2/2014 5:17", "20/2/2014 > 23:20" > > ), BCStopTime = c("17:05", "19:00", "15:57", "9:52", "15:39", > > "17:36", "1:55", "14:25", "5:17", "23:20"), Year2 = c(2014L, > > 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L > > ), Month2 = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Day2 = c(16L, > > 16L, 17L, 18L, 18L, 18L, 19L, 19L, 20L, 20L), Starting_SoC_of_12 > > c(1L, > > 2L, 4L, 5L, 4L, 2L, 8L, 8L, 4L, 8L), Ending_SoC_of_12 = c(11L, > > 11L, 12L, 8L, 4L, 10L, 12L, 12L, 12L, 12L)), row.names = c(NA, > > 10L), class = "data.frame") > > > > > > -- > > *Roslinazairimah Zakaria* > > *Tel: +609-5492370; Fax. No.+609-5492766* > > > > *Email: roslinaump at gmail.com <roslinaump at gmail.com>* > > University Malaysia Pahang > > Lebuhraya Tun Razak, 26300 Gambang, Pahang, Malaysia > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. >-- *Roslinazairimah Zakaria* *Tel: +609-5492370; Fax. No.+609-5492766* *Email: roslinazairimah at ump.edu.my <roslinazairimah at ump.edu.my>; roslinaump at gmail.com <roslinaump at gmail.com>* Faculty of Industrial Sciences & Technology University Malaysia Pahang Lebuhraya Tun Razak, 26300 Gambang, Pahang, Malaysia [[alternative HTML version deleted]]