确定 R 中的事件时间

Determine time of event in R

想知道在 R 中确定事件时间的最有效方法是什么。其他答案似乎没有按 ID 分组,这是我需要的一大块。

我的数据是这样的:

time = rep(c(1:5),2)
id = c(rep(1,5),rep(2,5))
event = c(0,0,0,1,1,0,1,1,1,1)

df = data.frame(cbind(time,id,event))
df
   time id event
1     1  1     0
2     2  1     0
3     3  1     0
4     4  1     1
5     5  1     1
6     1  2     0
7     2  2     1
8     3  2     1
9     4  2     1
10    5  2     1
>

其中“事件”是二元观察(实验中个体死亡),并且(应该)在第一次观察到后保持 1。

我需要为每个id号确定event == 1的第一次时间,并生成一个id号和第一次观察到的时间的向量,其中event =1

我原本打算草率地对 event =1 的数据进行子集化,然后只为每个 id 选择周中的最小值,但按 ID 分组时会变得更加草率。然后我尝试了一些聚合,但也很难跨 ID 分组进行聚合。我知道 tidyverse 有一些选择,但我是 n00b。

我相信有一种非常简单的方法可以做到这一点。谢谢!

tidyverse确实对这类东西超级有帮助。

df %>%
  filter(event == 1) %>%
  group_by(id) %>%
  arrange(id, time) %>%
  summarise(time = first(time)) %>% 
  ungroup()

# A tibble: 2 x 2
     id  time
  <dbl> <dbl>
1     1     4
2     2     2

如果你想保留原始数据帧的结构,试试这个

library(dplyr)

df %>% 
  group_by(id) %>% 
  mutate(d=ifelse(event==1, min(time[event>0]), 0)) %>% 
  ungroup()
# A tibble: 10 × 4
    time    id event     d
   <dbl> <dbl> <dbl> <dbl>
 1     1     1     0     0
 2     2     1     0     0
 3     3     1     0     0
 4     4     1     1     4
 5     5     1     1     4
 6     1     2     0     0
 7     2     2     1     2
 8     3     2     1     2
 9     4     2     1     2
10     5     2     1     2

数据

df <- structure(list(time = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5), id = c(1, 
1, 1, 1, 1, 2, 2, 2, 2, 2), event = c(0, 0, 0, 1, 1, 0, 1, 1, 
1, 1)), class = "data.frame", row.names = c(NA, -10L))
# set as data.table
setDT(df)

# find 1st death event. Fetch row
x <- 
df[event == 1
   ][, xx := 1:.N, id
   ][xx == 1
     ][, xx := NULL]

x
   time id event
1:    4  1     1
2:    2  2     1