reichm@@j m@iii@g oii sbcgiob@i@@et
2019-May-22 21:43 UTC
[R] Calculating date difference in days
R Help I have a function to calculate a date difference in days but my results come back in hours. I suspect I am using the as.POSIXlt function incorrectly . Suggestions? # Start time of data to be considered start_day <- "2016-04-30" # Make event and sequence IDs into factors elapsed_days <- function(end_date, start_date){ ed <- as.POSIXlt(end_date) sd <- as.POSIXlt(start_date) ed-sd } trans_sequence$eventID <- elapsed_days(trans_sequence$Date, start_day)> trans_sequence# A tibble: 39 x 5 # Groups: Emitter [15] Emitter Date SIZE Geohash eventID <int> <date> <int> <chr> <time> 1 1 2016-05-01 12 A;B;C;D;E;F;G;H;I;J;K;L 19 hours 2 1 2016-05-02 5 A;B;C;D;E 43 hours 3 1 2016-05-05 11 A;B;C;D;E;F;G;H;I;J;K 115 hours 4 2 2016-05-01 9 C;D;E;F;G;H;I;J;K 19 hours 5 2 2016-05-02 3 F;G;H 43 hours 6 2 2016-05-05 3 L;M;N 115 hours 7 3 2016-05-01 3 L;M;N 19 hours 8 3 2016-05-02 3 I;J;K 43 hours 9 3 2016-05-04 25 A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y 91 hours 10 3 2016-05-05 7 O;P;Q;R;S;T;U 115 hours Jeff Reichman [[alternative HTML version deleted]]
ed <- as.POSIXlt("2018-03-10") sd <- as.POSIXlt("2018-02-10") as.numeric(ed-sd) [1] 28 ed <- as.POSIXlt("2000-03-10") sd <- as.POSIXlt("2000-02-10") as.numeric(ed-sd) [1] 29 Cheers, B.> On 2019-05-22, at 17:43, reichmanj at sbcglobal.net wrote: > > R Help > > I have a function to calculate a date difference in days but my results come > back in hours. I suspect I am using the as.POSIXlt function incorrectly . > > Suggestions? > > # Start time of data to be considered > start_day <- "2016-04-30" > > # Make event and sequence IDs into factors > elapsed_days <- function(end_date, start_date){ > ed <- as.POSIXlt(end_date) > sd <- as.POSIXlt(start_date) > ed-sd > } > > trans_sequence$eventID <- elapsed_days(trans_sequence$Date, start_day) > > >> trans_sequence > # A tibble: 39 x 5 > # Groups: Emitter [15] > Emitter Date SIZE Geohash > eventID > <int> <date> <int> <chr> > <time> > 1 1 2016-05-01 12 A;B;C;D;E;F;G;H;I;J;K;L > 19 hours > 2 1 2016-05-02 5 A;B;C;D;E > 43 hours > 3 1 2016-05-05 11 A;B;C;D;E;F;G;H;I;J;K > 115 hours > 4 2 2016-05-01 9 C;D;E;F;G;H;I;J;K > 19 hours > 5 2 2016-05-02 3 F;G;H > 43 hours > 6 2 2016-05-05 3 L;M;N > 115 hours > 7 3 2016-05-01 3 L;M;N > 19 hours > 8 3 2016-05-02 3 I;J;K > 43 hours > 9 3 2016-05-04 25 > A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y 91 hours > 10 3 2016-05-05 7 O;P;Q;R;S;T;U > 115 hours > > Jeff Reichman > > > [[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.
You can use units<- to change the time units of the difference. E.g.,> d <- as.POSIXlt("2018-03-10") - as.POSIXlt("2018-03-09 02:00:00") > dTime difference of 22 hours> units(d) <- "days" > dTime difference of 0.9166667 days> > units(d) <- "mins" > dTime difference of 1320 mins> units(d) <- "secs" > dTime difference of 79200 secs> units(d) <- "weeks" > dTime difference of 0.1309524 weeks Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, May 22, 2019 at 2:44 PM <reichmanj at sbcglobal.net> wrote:> R Help > > I have a function to calculate a date difference in days but my results > come > back in hours. I suspect I am using the as.POSIXlt function incorrectly . > > Suggestions? > > # Start time of data to be considered > start_day <- "2016-04-30" > > # Make event and sequence IDs into factors > elapsed_days <- function(end_date, start_date){ > ed <- as.POSIXlt(end_date) > sd <- as.POSIXlt(start_date) > ed-sd > } > > trans_sequence$eventID <- elapsed_days(trans_sequence$Date, start_day) > > > > trans_sequence > # A tibble: 39 x 5 > # Groups: Emitter [15] > Emitter Date SIZE Geohash > eventID > <int> <date> <int> <chr> > <time> > 1 1 2016-05-01 12 A;B;C;D;E;F;G;H;I;J;K;L > 19 hours > 2 1 2016-05-02 5 A;B;C;D;E > 43 hours > 3 1 2016-05-05 11 A;B;C;D;E;F;G;H;I;J;K > 115 hours > 4 2 2016-05-01 9 C;D;E;F;G;H;I;J;K > 19 hours > 5 2 2016-05-02 3 F;G;H > 43 hours > 6 2 2016-05-05 3 L;M;N > 115 hours > 7 3 2016-05-01 3 L;M;N > 19 hours > 8 3 2016-05-02 3 I;J;K > 43 hours > 9 3 2016-05-04 25 > A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y 91 hours > 10 3 2016-05-05 7 O;P;Q;R;S;T;U > 115 hours > > Jeff Reichman > > > [[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. >[[alternative HTML version deleted]]
At the point where you say "date difference in days" IMO you have departed from what `difftime` is for and are in the realm of a numeric measure. I ignore the units inside `difftime` at all times and convert to numeric with a units argument if I want to be that specific about how the measure is represented. You may or may not recall the difference between angle ABC and the measure of angle ABC (with a bar over it) from geometry... but the idea is the same... distinguish the thing (time interval) from the numbers used to quantify it (numeric). elapsed_days <- function(end_date, start_date){ ed <- as.POSIXlt(end_date) sd <- as.POSIXlt(start_date) as.numeric( ed-sd, units="days" ) } On May 22, 2019 2:43:42 PM PDT, reichmanj at sbcglobal.net wrote:>R Help > >I have a function to calculate a date difference in days but my results >come >back in hours. I suspect I am using the as.POSIXlt function >incorrectly . > >Suggestions? > ># Start time of data to be considered >start_day <- "2016-04-30" > ># Make event and sequence IDs into factors >elapsed_days <- function(end_date, start_date){ > ed <- as.POSIXlt(end_date) > sd <- as.POSIXlt(start_date) > ed-sd >} > >trans_sequence$eventID <- elapsed_days(trans_sequence$Date, start_day) > > >> trans_sequence ># A tibble: 39 x 5 ># Groups: Emitter [15] > Emitter Date SIZE Geohash >eventID > <int> <date> <int> <chr> ><time> > 1 1 2016-05-01 12 A;B;C;D;E;F;G;H;I;J;K;L >19 hours > 2 1 2016-05-02 5 A;B;C;D;E >43 hours > 3 1 2016-05-05 11 A;B;C;D;E;F;G;H;I;J;K >115 hours > 4 2 2016-05-01 9 C;D;E;F;G;H;I;J;K >19 hours > 5 2 2016-05-02 3 F;G;H >43 hours > 6 2 2016-05-05 3 L;M;N >115 hours > 7 3 2016-05-01 3 L;M;N >19 hours > 8 3 2016-05-02 3 I;J;K >43 hours > 9 3 2016-05-04 25 >A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y 91 hours >10 3 2016-05-05 7 O;P;Q;R;S;T;U >115 hours > >Jeff Reichman > > > [[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.-- Sent from my phone. Please excuse my brevity.