Re: [R] calculate time from dates
Hello, It's better if you keep it on the list, the odds of getting more and better answers is greater. As for your question, I've made up a dat2 with an extra column. Try the following, it's independent of the number of columns. dat2 - data.frame(ID = dat1$ID, month = mondf(01/01/2008, dat1$date, format = %m/%d/%Y) + 1, other = rnorm(6)) dat2 sp - split(dat2, list(dat2$ID, dat2$month)) result - do.call(rbind, lapply(sp, tail, 1)) rownames(result) - seq_len(nrow(result)) result Hope this helps, Rui Barradas Em 12-07-2013 09:04, Gallon Li escreveu: Dear Rui, I think your solution is the best. however, to keep only the last one if month diff are equal part: because my data also have other variables besides ID and month, your code doesn't work. where should i modify it? in another word, my dat2 contains more than 2 columns.i tried to modify [1:2] to [1:p] where p is the total number of columns in dat2 but it still doesn't work. Best, Gallon On Thu, Jul 11, 2013 at 7:00 PM, Rui Barradas ruipbarra...@sapo.pt mailto:ruipbarra...@sapo.pt wrote: Hello, The functions in stackoverflow need a date 'format' argument. # Functions from # http://stackoverflow.com/__questions/1995933/number-of-__months-between-two-dates http://stackoverflow.com/questions/1995933/number-of-months-between-two-dates # with a 'format' argument added # # turn a date into a 'monthnumber' relative to an origin monnb - function(d, format = %Y-%m-%d) { lt - as.POSIXlt(as.Date(d, origin=1900-01-01, format = format)) lt$year*12 + lt$mon } # compute a month difference as a difference between two monnb's mondf - function(d1, d2, format = %Y-%m-%d) { monnb(d2, format = format) - monnb(d1, format = format) } dat1 - read.table(text = ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 , header = TRUE) dat2 - data.frame(ID = dat1$ID, month = mondf(01/01/2008, dat1$date, format = %m/%d/%Y) + 1) # Now keep just the last one if month diffs are equal result - with(dat2, aggregate(month, list(ID, month), FUN = tail, 1))[1:2] names(result) - names(dat2) result Hope this helps, Rui Barradas Em 11-07-2013 11:03, andrija djurovic escreveu: Hi. See http://stackoverflow.com/__questions/1995933/number-of-__months-between-two-dates http://stackoverflow.com/questions/1995933/number-of-months-between-two-dates Andrija On Thu, Jul 11, 2013 at 11:56 AM, Gallon Li gallon...@gmail.com mailto:gallon...@gmail.com wrote: My data are from 2008 to 2010, with repeated measures for same subjects. I wish to compute number of months since january 2008. The data are like the following: ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 ... the date column are in the format %m/%d/%y. i wish to obtain ID month 1 4 1 4 1 5 2 15 2 16 2 20 ... also, for the same ID with two identical month, I only want to keep the last one. can any expert help with this question? [[alternative HTML version deleted]] R-help@r-project.org mailto:R-help@r-project.org mailing list https://stat.ethz.ch/mailman/__listinfo/r-help https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/__posting-guide.html http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]] R-help@r-project.org mailto:R-help@r-project.org mailing list https://stat.ethz.ch/mailman/__listinfo/r-help https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/__posting-guide.html http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. __ 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.
[R] calculate time from dates
My data are from 2008 to 2010, with repeated measures for same subjects. I wish to compute number of months since january 2008. The data are like the following: ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 ... the date column are in the format %m/%d/%y. i wish to obtain ID month 1 4 1 4 1 5 2 15 2 16 2 20 ... also, for the same ID with two identical month, I only want to keep the last one. can any expert help with this question? [[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.
Re: [R] calculate time from dates
Hi. See http://stackoverflow.com/questions/1995933/number-of-months-between-two-dates Andrija On Thu, Jul 11, 2013 at 11:56 AM, Gallon Li gallon...@gmail.com wrote: My data are from 2008 to 2010, with repeated measures for same subjects. I wish to compute number of months since january 2008. The data are like the following: ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 ... the date column are in the format %m/%d/%y. i wish to obtain ID month 1 4 1 4 1 5 2 15 2 16 2 20 ... also, for the same ID with two identical month, I only want to keep the last one. can any expert help with this question? [[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. [[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.
Re: [R] calculate time from dates
Hi, May be this helps: dat1- read.table(text= ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 ,sep=,header=TRUE,stringsAsFactors=FALSE) library(mondate) M1- mondate(dat1[,2]) M2- mondate(01/01/2008) dat1$month-as.numeric(abs(floor(MonthsBetween(M1,M2 dat1 # ID date month #1 1 4/12/2008 4 #2 1 4/13/2008 4 #3 1 5/11/2008 5 #4 2 3/21/2009 15 #5 2 4/22/2009 16 #6 2 8/05/2009 20 A.K. - Original Message - From: Gallon Li gallon...@gmail.com To: r-help r-h...@stat.math.ethz.ch Cc: Sent: Thursday, July 11, 2013 5:56 AM Subject: [R] calculate time from dates My data are from 2008 to 2010, with repeated measures for same subjects. I wish to compute number of months since january 2008. The data are like the following: ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 ... the date column are in the format %m/%d/%y. i wish to obtain ID month 1 4 1 4 1 5 2 15 2 16 2 20 ... also, for the same ID with two identical month, I only want to keep the last one. can any expert help with this question? [[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. __ 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.
Re: [R] calculate time from dates
Hello, The functions in stackoverflow need a date 'format' argument. # Functions from # http://stackoverflow.com/questions/1995933/number-of-months-between-two-dates # with a 'format' argument added # # turn a date into a 'monthnumber' relative to an origin monnb - function(d, format = %Y-%m-%d) { lt - as.POSIXlt(as.Date(d, origin=1900-01-01, format = format)) lt$year*12 + lt$mon } # compute a month difference as a difference between two monnb's mondf - function(d1, d2, format = %Y-%m-%d) { monnb(d2, format = format) - monnb(d1, format = format) } dat1 - read.table(text = ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 , header = TRUE) dat2 - data.frame(ID = dat1$ID, month = mondf(01/01/2008, dat1$date, format = %m/%d/%Y) + 1) # Now keep just the last one if month diffs are equal result - with(dat2, aggregate(month, list(ID, month), FUN = tail, 1))[1:2] names(result) - names(dat2) result Hope this helps, Rui Barradas Em 11-07-2013 11:03, andrija djurovic escreveu: Hi. See http://stackoverflow.com/questions/1995933/number-of-months-between-two-dates Andrija On Thu, Jul 11, 2013 at 11:56 AM, Gallon Li gallon...@gmail.com wrote: My data are from 2008 to 2010, with repeated measures for same subjects. I wish to compute number of months since january 2008. The data are like the following: ID date 1 4/12/2008 1 4/13/2008 1 5/11/2008 2 3/21/2009 2 4/22/2009 2 8/05/2009 ... the date column are in the format %m/%d/%y. i wish to obtain ID month 1 4 1 4 1 5 2 15 2 16 2 20 ... also, for the same ID with two identical month, I only want to keep the last one. can any expert help with this question? [[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. [[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. __ 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.