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]]
roslinazairimah zakaria
2022-Jul-19 15:18 UTC
[R] Extract time and state of charge (Start and End) and Count
Hi Jim, I tried to run your code and got this error.> # get the temporal order of observations > obs_order <-order(c(as.numeric(dt$BCStartTime),as.numeric(dt$BCStopTime))) Warning messages: 1: In order(c(as.numeric(dt$BCStartTime), as.numeric(dt$BCStopTime))) : NAs introduced by coercion 2: In order(c(as.numeric(dt$BCStartTime), as.numeric(dt$BCStopTime))) : NAs introduced by coercion>numeric_time<-c(as.numeric(dt$BCStartTime),as.numeric(dt$BCStopTime))[obs_order] Warning messages: 1: NAs introduced by coercion 2: NAs introduced by coercion> nobs<-diff(range(numeric_time))/3600 > # find the linear approximation of charge state by hours > hourly_SoC <- approx(numeric_time,+ c(dt$Starting_SoC_of_12,dt$Ending_SoC_of_12)[obs_order],n=nobs) Error in approx(numeric_time, c(dt$Starting_SoC_of_12, dt$Ending_SoC_of_12)[obs_order], : need at least two non-NA values to interpolate On Tue, Jul 19, 2022 at 3:22 PM roslinazairimah zakaria < roslinaump at gmail.com> wrote:> 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 >-- *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]]