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.