[R] Data manipulation question
cruz
cruadam at gmail.com
Thu Nov 6 11:04:25 CET 2008
On Thu, Nov 6, 2008 at 4:23 PM, Peter Jepsen <PJ at dce.au.dk> wrote:
>
> Here is an example:
>
> id <- c(rep("a",4),rep("b",2), rep("c",5), rep("d",1))
> start <- c(c(0,6,17,20),c(0,1),c(0,5,10,11,50),c(0))
> stop <- c(c(6,12,20,30),c(1,10),c(3,10,11,30,55),c(6))
> data <- as.data.frame(cbind(id,start,stop))
> data
> # id start stop
> # 1 a 0 6
> # 2 a 6 12
> # 3 a 17 20
> # 4 a 20 30
> # 5 b 0 1
> # 6 b 1 10
> # 7 c 0 3
> # 8 c 5 10
> # 9 c 10 11
> # 10 c 11 30
> # 11 c 50 55
> # 12 d 0 6
>
> So, what I want to end up with is this:
>
> id start stop
> a 0 12 # This patient was transferred at time 6 and discharged at
> time 12. The admission starting at time 17 is therefore irrelevant.
> b 0 10
> c 0 3
> d 0 6
>
Try this:
result <- list()
num <- length(levels(factor(data$id)))
length(result) <- 3*num
dim(result) <- c(3,num)
result <- data[data$start == 0,]
Y <- as.integer(row.names(result))
for (i in 1:num) {
if (Y[i] == dim(data)[1]) (result[i,3] <- data[dim(data)[1],3])
else (result[i,3] <- data[Y[i]+1,3])
}
result
Sorry it is ugly cuz i am new too but hopefully it gives you some ideas.
More information about the R-help
mailing list