Переформатирование данных панели в соответствии с переменной времени и события
У меня есть набор данных панели со многими переменными. Три наиболее важные переменные: "cid" (код страны), "время" (0-65) и "событие" (0, 1, 2, 3, 4, 5, 6). Я пытаюсь запустить регрессия Кокса (с использованием coxph
), однако, поскольку переменная времени имеет разные начальные и конечные точки для каждой страны, мне нужно сначала создать переменную времени начала и окончания. Вот где я сталкиваюсь с моей проблемой.
Вот как может выглядеть пример трех основных переменных:
> data
cid time event
[1,] "AFG" "20" "0"
[2,] "AFG" "21" "0"
[3,] "AFG" "22" "0"
[4,] "AFG" "23" "0"
[5,] "AFG" "24" "0"
[6,] "AFG" "25" "0"
[7,] "AFG" "26" "1"
[8,] "AFG" "27" "1"
[9,] "AFG" "28" "1"
[10,] "AFG" "29" "1"
Идея состоит в том, чтобы преобразовать эти данные в следующее:
> data
cid time1 time2 event
[1,] "AFG" "20" "25" "0"
[2,] "AFG" "26" "29" "1"
Как именно это можно сделать (имея в виду, что в моем наборе данных немало других объясняющих переменных)?
2 ответа
Вы можете использовать dplyr и pipe. Это решение будет работать, если ваши данные всегда упорядочены последовательно, как в вашем примере.
data<-data.frame(cid=rep("AFG",10),time=seq(20,29,1),event=c(0,0,0,0,0,0,1,1,1,1))
library(dplyr)
data %>% group_by(cid,event) %>%
summarise(time1=min(time),time2=max(time))
subset1<- data[data$event==0,]
subset1
subset2<- data[data$event==1,]
subset2
s1<- cbind(cid="AFG",time1=min(subset1$time),time2=max(subset1$time),event = 0)
s1
s2<- cbind(cid="AFG",time1=min(subset2$time),time2=max(subset2$time),event = 1)
s2
data1=rbind(s1,s2)
data1
# cid time1 time2 event
# [1,] "AFG" "20" "25" "0"
# [2,] "AFG" "26" "29" "1"
Надеюсь, это немного поможет.