Hi.
No problem.
cc:ing to Rhelp.
A.K.




________________________________
 From: GUANGUAN LUO <guanguanluo@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 <guanguanluo@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 <guanguanluo@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 <guanguanluo@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 <guanguanluo@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 <guanguanluo@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 <guanguanluo@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]]

