[R] Calculating number of elapsed days from starting date

Rolf Turner rolf.turner at xtra.co.nz
Thu Sep 27 10:36:11 CEST 2012


On 27/09/12 17:16, Marcel Curlin wrote:
> Hi
> I have data for events in rows, with columns for person and date. Each
> person may have more than one event;
>
> tC <- textConnection("
> Person	date
> bob	1/1/00
> bob	1/2/00
> bob	1/3/00
> dave	1/7/00
> dave	1/8/00
> dave	1/10/00
> kevin	1/2/00
> kevin	1/3/00
> kevin	1/4/00
> ")
> data <- read.table(header=TRUE, tC)
> close.connection(tC)
> rm(tC)
>
> I would like to add a new column to my dataframe containing the calculated
> number of elapsed days from the starting date for each person. So the new
> dataframe would read
>
> Person	date	Days
> bob	1/1/00	0
> bob	1/2/00	1
> bob	1/3/00	2
> dave	1/7/00	0
> dave	1/8/00	1
> dave	1/10/00	3
> kevin	1/2/00	0
> kevin	1/3/00	1
> kevin	1/4/00	2
>
> Not sure how to do this, tried looking through the forum but didn't find
> anything that seemed to apply. Suggestions appreciated.
>
X <- data
X$date <- with(X,as.Date(date,format="%m/%d/%y"))
X$Days <- unlist(with(X,tapply(date,Person,function(x){x-x[1]})))

And then if you *really* want to keep that shaganappi date format:

X$date <- data$date
X
# Giving:
Person    date Days
1    bob  1/1/00    0
2    bob  1/2/00    1
3    bob  1/3/00    2
4   dave  1/7/00    0
5   dave  1/8/00    1
6   dave 1/10/00    3
7  kevin  1/2/00    0
8  kevin  1/3/00    1
9  kevin  1/4/00    2

BTW:  You really *shouldn't* call your data "data".  See:

     fortune("dog")

         cheers,

             Rolf Turner




More information about the R-help mailing list