在Tidyverse中筛选到事件的时间数据
我有一些时间来处理我正在处理的事件数据。我想过滤从受试者第一次参与研究到第一次观察事件的数据(不担心第一次事件后发生的重复事件——只想探索第一次事件发生的时间) 我在在Tidyverse中筛选到事件的时间数据,r,tidyverse,survival-analysis,R,Tidyverse,Survival Analysis,我有一些时间来处理我正在处理的事件数据。我想过滤从受试者第一次参与研究到第一次观察事件的数据(不担心第一次事件后发生的重复事件——只想探索第一次事件发生的时间) 我在过滤器函数中使用了介于之间的函数,该函数过去一直对我有效,但在这里存在问题,因为有些主题从未发生过事件,因此我得到一个错误,该错误声明为错误:需要一个值:[extent=0]。 我想我想要的是一种过滤受试者从开始进入研究到第一个事件之间的数据的方法,或者如果没有事件受试者,则过滤受试者的所有数据 以下是我的数据的示例: ## dat
过滤器
函数中使用了介于
之间的函数,该函数过去一直对我有效,但在这里存在问题,因为有些主题从未发生过事件,因此我得到一个错误,该错误声明为错误:需要一个值:[extent=0]。
我想我想要的是一种过滤受试者从开始进入研究到第一个事件之间的数据的方法,或者如果没有事件受试者,则过滤受试者的所有数据
以下是我的数据的示例:
## data
subject <- c("A", "A", "A", "A", "B", "B", "C", "C", "C", "D", "E", "E", "E", "E", "E", "F", "F", "F", "F", "F")
event <- c(0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0)
df <- data.frame(subject, event)
## create index to count the days the subject is in the study
library(tidyverse)
df <- df %>%
group_by(subject) %>%
mutate(ID = seq_along(subject))
df
# A tibble: 20 x 3
# Groups: subject [6]
subject event ID
<fct> <dbl> <int>
1 A 0 1
2 A 0 2
3 A 1 3
4 A 0 4
5 B 0 1
6 B 0 2
7 C 0 1
8 C 0 2
9 C 1 3
10 D 0 1
11 E 0 1
12 E 1 2
13 E 0 3
14 E 1 4
15 E 1 5
16 F 0 1
17 F 0 2
18 F 0 3
19 F 0 4
20 F 0 5
## filter event times between the start of the trial and when the subject has the event for the first time
df %>%
group_by(subject) %>%
filter(., between(row_number(),
left = which(ID == 1),
right = which(event == 1)))
##数据
科目%
过滤器(,介于(行号()之间),
左=哪个(ID==1),
右=哪个(事件==1)))
最后一部分是我的错误发生的地方。这就是你要找的吗
df2 <- df %>%
group_by(subject) %>%
filter(cumsum(event) == 0 | (cumsum(event) == 1 & event == 1))
df2%
分组依据(受试者)%>%
过滤器(累计和(事件)==0 |(累计和(事件)==1&事件==1))
结果:
# A tibble: 16 x 2
# Groups: subject [6]
subject event
<fct> <dbl>
1 A 0
2 A 0
3 A 1
4 B 0
5 B 0
6 C 0
7 C 0
8 C 1
9 D 0
10 E 0
11 E 1
12 F 0
13 F 0
14 F 0
15 F 0
16 F 0
#一个tible:16 x 2
#分组:受试者[6]
主题事件
1 A 0
2 A 0
3 A 1
4B0
5 B 0
6c0
7c0
8 C 1
9d0
10 E 0
11 E 1
12 F 0
13 F 0
14 F 0
15 F 0
16 F 0