Переформатирование данных панели в соответствии с переменной времени и события

У меня есть набор данных панели со многими переменными. Три наиболее важные переменные: "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"  

Надеюсь, это немного поможет.

Другие вопросы по тегам