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.

Reply via email to