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.