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.