On Mon, Oct 11, 2010 at 5:25 AM, Bert Jacobs
<bert.jacobs at figurestofacts.be> wrote:
Hi, I have the following data frame, where col2 is a startdate and col3 an enddate COL1 ? ? ?COL2 ? ? ?COL3 A ? ? ? ? ? ? 40462 ? ?40482 B ? ? ? ? ? ? 40462 ? ?40478 The above timeframe of 3 weeks I would like to splits it in weeks like this COL1 ? ? ?COL2 ? ? ?COL3 ? ? ?COL4 A ? ? ? ? ? ? 40462 ? ?40468 ? ?1 A ? ? ? ? ? ? 40469 ? ?40475 ? ?1 A ? ? ? ? ? ? 40476 ? ?40482 ? ?1 B ? ? ? ? ? ? 40462 ? ?40468 ? ?1 B ? ? ? ? ? ? 40469 ? ?40475 ? ?1 B ? ? ? ? ? ? 40476 ? ?40478 ? ?0.428 Where COL4 is an identifier if the timeframe between COL2 and COL3 is exactly 7 days or shorter. In the example above for B the last split contains only 3 days so the value in COL 4 is 3/7
Try this:
DF <- data.frame(COL1 = c("A", "B"), COL2 = 40462, COL3 = c(40482, 40478))
do.call("rbind", by(DF, DF$COL1, function(x) with(x, {
COL2 <- seq(COL2, COL3, 7)
COL3 <- pmin(COL2 + 6, COL3)
COL4 <- (COL3 - COL2 + 1) / 7
data.frame(COL1, COL2, COL3, COL4)
})))
Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com