我有df
看起来像这样,我需要运行代码来生成change
。 change
被定义为第一次获得永久积极outcome
(outcome
= 1)。
逻辑如下:
ID
有5个visits
,每个outcome
visit
change
变量只有1
,如果结果为1
x visit
x及其后id
2在change
2时无法time
= 1,因为outcome
会在time
3恢复为否定结果。< / LI>
id
3 visit
3的潜在结果可能是1或0.由于此次访问的值可能为1,因此change
应为1。我的数据包含所需的输出变量
id visit outcome change
1 1 0 0
1 2 0 0
1 3 0 0
1 4 1 1
1 5 1 0
2 1 0 0
2 2 1 0
2 3 0 0
2 4 1 1
2 5 1 0
3 1 0 0
3 2 NA 1
3 3 1 1
3 4 1 0
3 5 1 0
答案 0 :(得分:1)
您可以使用dplyr
轻松完成此操作:
library(dplyr)
df <- data.frame(id = rep(c(1,2,3), each = 5), visit = rep(1:5, 3),
outcome = c(0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, NA, 1,1,1))
df %>%
group_by(id) %>%
mutate(change = as.numeric(lead(outcome) == 1 & outcome == 1),
change = ifelse(visit == 5, 0, change),
change = ifelse(is.na(change), lead(change), change))