[R] how to change the date into an interval of date?

arun smartpink111 at yahoo.com
Wed Apr 17 14:54:13 CEST 2013


Hi,
Try:
evt_c.1<- read.table(text="
patient_id   responsed_at
1            2010-5
1            2010-7
1            2010-8
1            2010-9
2            2010-5
2            2010-6
2            2010-7
",sep="",header=TRUE,stringsAsFactors=FALSE)  
lst1<-split(evt_c.1,evt_c.1$patient_id)
 res<-do.call(rbind,lapply(lst1,function(x) {x1<-as.numeric(gsub(".*\\-","",x[,2])); x$t<-c(0,cumsum(diff(x1)));x}))
 row.names(res)<-1:nrow(res)
 res
#  patient_id responsed_at t
#1          1       2010-5 0
#2          1       2010-7 2
#3          1       2010-8 3
#4          1       2010-9 4
#5          2       2010-5 0
#6          2       2010-6 1
#7          2       2010-7 2

#or
library(plyr)
res2<-mutate(evt_c.1,t=ave(as.numeric(gsub(".*\\-","",responsed_at)),patient_id,FUN=function(x) c(0,cumsum(diff(x)))))
res2
#  patient_id responsed_at t
#1          1       2010-5 0
#2          1       2010-7 2
#3          1       2010-8 3
#4          1       2010-9 4
#5          2       2010-5 0
#6          2       2010-6 1
#7          2       2010-7 2
 identical(res,res2)
#[1] TRUE

A.K.


________________________________
 From: GUANGUAN LUO <guanguanluo at gmail.com>
To: arun <smartpink111 at yahoo.com> 
Sent: Wednesday, April 17, 2013 8:32 AM
Subject: Re: how to change the date into an interval of date?
 


thank you, and now i've got a table like this
> dput(head(evt_c.1,5)) structure(list(responsed_at = c("2010-05", "2010-07", "2010-08", 
"2010-10", "2010-11"), patient_id = c(2L, 2L, 2L, 2L, 2L), number = c(1, 
2, 3, 4, 5), response_id = c(77L, 1258L, 2743L, 4499L, 6224L),  session_id = c(2L, 61L, 307L, 562L, 809L), login = c(3002,  3002, 3002, 3002, 3002), clinique_basdai.fatigue = c(4, 5,  5, 6, 4), 

which i want is to add a column "t", for example
now my table is like this:
patient_id   responsed_at
1            2010-5
1            2010-7
1            2010-8
1            2010-9
2            2010-5
2            2010-6
2            2010-7 

after add the column "t"

paient_id     responsed_at    t
1            2010-5           0
1            2010-7           2
1            2010-8           3
1            2010-9           4
2            2010-5           0
2            2010-6           1
2            2010-7           2 




Le 17 avril 2013 14:23, arun <smartpink111 at yahoo.com> a écrit :

Hi,
>format() is one way.
>library(zoo)
> as.yearmon(dat1$responsed_at)
>#[1] "May 2010" "Jul 2010" "Aug 2010" "Oct 2010" "Nov 2010" "Dec 2010"
> #[7] "Jan 2011" "Feb 2011" "Mar 2011" "Apr 2011" "Jun 2011" "Jul 2011"
>#[13] "Aug 2011" "Sep 2011" "Oct 2011" "Nov 2011" "Dec 2011" "Jan 2012"
>#[19] "Mar 2012" "May 2010"
>A.K.
>
>
>
>




More information about the R-help mailing list