Bonjour à tous,
Je me permets de faire ce post car j’ai un petit soucis de datamanning et j'aurais besoin de conseil.
Je cherche à transformer une dataset (format wide) afin de pouvoir faire un cox temps dependant avec plusieurs variables dépendantes du temps. Pour cela, il me faut une dataframe en format long. Le soucis c'est que j’arrive à le faire avec une variable mais pas avec plusieurs variables.
Voici l’exemple afin d’être plus précis :
Voici le format de ma table actuelle :
ID CGR Del_CGR CUP Del_CUP PFC Del_PFC STATUT Del_Hospit
00001 1 2 1 6 1 10 1 15
00002 1 5 0 0 0 0 0 10
J’aimerais la transformer dans le format suivant :
ID Start Stop CGR CUP PFC Event
00001 0 2 0 0 0 0
00001 2 6 1 0 0 0
00001 6 10 1 1 0 0
00001 10 15 1 1 1 1
00002 0 5 0 0 0 0
00002 5 10 1 0 0 1
J’arrive à le faire avec une variable (CGR ou CUP ou PFC) mais pas les 3 en même temps.
Mon script reproductible qui me permet de le faire est le suivant :
baz<-data.frame(ID=c(00001,00002),CGR=c(1,1), Del_CGR=c(2,5),CUP=c(1,0),
Del_CUP=c(6,NA),PFC=c(1,0),Del_PFC=c(10,NA),STATUT=c(1,0),
Del_Hospit=c(15,10))
baz$Del_CGR<-as.numeric(as.character(baz$Del_CGR))
baz$Del_CUP<-as.numeric(as.character(baz$Del_CUP))
baz$Del_PFC<-as.numeric(as.character(baz$Del_PFC))
baz$Del_Hospit<-as.numeric(as.character(baz$Del_Hospit))
baz.A <- subset(baz)
baz.A$Start <- 0
baz.A$Stop <- pmin(baz.A$Del_Hospit, baz.A$Del_CGR)
baz.A$EV <- baz.A$STATUT
baz.A$EV[!is.na(baz.A$Del_CGR)] <- 0
baz.A$CGR <- 0
baz.B <- subset(baz ,!is.na(Del_CGR) )
baz.B$Start <- baz.B$Del_CGR
baz.B$Stop <- baz.B$Del_Hospit
baz.B$EV <- baz.B$STATUT
baz.B$CGR <- 1
baz.TD <- rbind(baz.A ,baz.B)
baz.TD <- baz.TD[order(baz.TD$ID,baz.TD$ Start),]
En vous remerciant,
Matthieu