Hi. No problem. cc:ing to Rhelp. A.K.
________________________________ From: GUANGUAN LUO <guanguan...@gmail.com> Sent: Wednesday, April 17, 2013 10:25 AM Subject: Re: how to change the date into an interval of date? Thank you so much . That is exactly the things i want. GG Hi, >Try this: >library(mondate) >mutate(evt_c.1,t=ave(round(as.numeric(mondate(paste(evt_c.1[,2],"-01",sep="")))),patient_id,FUN=function(x) > c(0,cumsum(diff(x))))) > > # 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 1 2010-12 7 >#6 1 2011-1 8 >#7 1 2011-2 9 >#8 2 2010-5 0 >#9 2 2010-6 1 >#10 2 2010-7 2 >#11 3 2010-1 0 >#12 3 2010-2 1 >#13 3 2010-4 3 >#14 3 2010-5 4 >#15 4 2011-01 0 >#16 4 2011-03 2 >#17 5 2012-04 0 >#18 5 2012-06 2 >If it change: >evt_c.1$responsed_at[6:7]<- c("2011-05","2011-07") > >mutate(evt_c.1,t=ave(round(as.numeric(mondate(paste(evt_c.1[,2],"-01",sep="")))),patient_id,FUN=function(x) > c(0,cumsum(diff(x))))) > ># 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 1 2010-12 7 >#6 1 2011-05 12 >#7 1 2011-07 14 > >#8 2 2010-5 0 >#9 2 2010-6 1 >#10 2 2010-7 2 >#11 3 2010-1 0 >#12 3 2010-2 1 >#13 3 2010-4 3 >#14 3 2010-5 4 >#15 4 2011-01 0 >#16 4 2011-03 2 >#17 5 2012-04 0 >#18 5 2012-06 2 > > >A.K. > > > >________________________________ > From: GUANGUAN LUO <guanguan...@gmail.com> >Sent: Wednesday, April 17, 2013 9:25 AM > >Subject: Re: how to change the date into an interval of date? > > > >mutate(evt_c.11,t=ave(as.numeric(gsub(".*\\-","",responsed_at)),patient_id,FUN=function(x) > c(0,cumsum(diff(x))))) 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 1 2010-12 7 >6 1 2011-1 8 >7 1 2011-2 9 >8 2 2010-5 0 >9 2 2010-6 1 >10 2 2010-7 2 >11 3 2010-1 0 >12 3 2010-2 1 >13 3 2010-4 3 >14 3 2010-5 4 >15 4 2011-01 0 >16 4 2011-03 2 >17 5 2012-04 0 >18 5 2012-06 2 >this is the order i want. you are so kind-hearted. > >GG > > >Alright, Sorry, I misunderstood. So, what do you want your result to be at >"2011-1". Is it 0? >> >> >> >> >> >> >>________________________________ >> From: GUANGUAN LUO <guanguan...@gmail.com> >>Sent: Wednesday, April 17, 2013 9:21 AM >> >>Subject: Re: how to change the date into an interval of date? >> >> >> >>evt_c.1<- read.table(text=" >>patient_id responsed_at >>1 2010-5 >>1 2010-7 >>1 2010-8 >>1 2010-9 >>1 2010-12 >>1 2011-1 >>1 2011-2 >>2 2010-5 >>2 2010-6 >>2 2010-7 >>3 2010-1 >>3 2010-2 >>3 2010-4 >>3 2010-5 >>4 2011-01 >>4 2011-03 >>5 2012-04 >>5 2012-06 >>",sep="",header=TRUE, >>stringsAsFactors=FALSE) >> >>mutate(evt_c.11,t=ave(as.numeric(gsub(".*\\-","",responsed_at)),patient_id,FUN=function(x) >> c(0,cumsum(diff(x))))) 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 1 2010-12 7 >6 1 2011-1 -4 >7 1 2011-2 -3 >8 2 2010-5 0 >9 2 2010-6 1 >10 2 2010-7 2 >11 3 2010-1 0 >12 3 2010-2 1 >13 3 2010-4 3 >14 3 2010-5 4 >15 4 2011-01 0 >16 4 2011-03 2 >17 5 2012-04 0 >18 5 2012-06 2 >> >> >>This is my problem. >> >> >> >> >> >>If this is not what your problem, please provide a dataset like below and >>explain where is the problem? >>> >>> >>> >>> >>> >>>----- Original Message ----- >>>To: GUANGUAN LUO <guanguan...@gmail.com> >>>Cc: >>>Sent: Wednesday, April 17, 2013 9:17 AM >>>Subject: Re: how to change the date into an interval of date? >>> >>>Hi, >>>I am not sure I understand your question: >>>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 >>>3 2010-1 >>>3 2010-2 >>>3 2010-4 >>>3 2010-5 >>>4 2011-01 >>>4 2011-03 >>>5 2012-04 >>>5 2012-06 >>>",sep="",header=TRUE,stringsAsFactors=FALSE) >>> >>>mutate(evt_c.1,t=ave(as.numeric(gsub(".*\\-","",responsed_at)),patient_id,FUN=function(x) >>> c(0,cumsum(diff(x))))) >>> 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 >>>8 3 2010-1 0 >>>9 3 2010-2 1 >>>10 3 2010-4 3 >>>11 3 2010-5 4 >>>12 4 2011-01 0 >>>13 4 2011-03 2 >>>14 5 2012-04 0 >>>15 5 2012-06 2 >>>A.K. >>> >>> >>> >>>________________________________ >>>From: GUANGUAN LUO <guanguan...@gmail.com> >>>Sent: Wednesday, April 17, 2013 9:11 AM >>>Subject: Re: how to change the date into an interval of date? >>> >>> >>> >>>but the date is untill 2012, if you do like this, t of 2011-01 would be -4. >>> >>> >>>2013/4/17 GUANGUAN LUO <guanguan...@gmail.com> >>> >>>but the date is untill 2012, if you do like this, t of 2011-01 would be -1. >>>> >>>> >>>> >>>> >>>>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 <guanguan...@gmail.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 >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>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. >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>> >>> >> >> >> > [[alternative HTML version deleted]]
______________________________________________ R-help@r-project.org mailing list 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.