我在R中工作,我想为治疗可以为个人打开和关闭的情况创建一个相对时间索引.因此,当治疗变为1时,索引将从某个负数向上计数直到0,并且只要在重置之前治疗保持在1,索引将向上计数.用一个例子来解释我需要什么是最简单的.
假设我有如下数据:
df <- data.frame(id = c(1,1,1,1,1,1,1,1,1,1,1,2,2,2,2), treatment = c(0,0,1,1,0,0,0,1,1,1,0,0,1,1,1))
我想要取得以下结果:
id treatment relative_time
1 1 0 -2
2 1 0 -1
3 1 1 0
4 1 1 1
5 1 0 -3
6 1 0 -2
7 1 0 -1
8 1 1 0
9 1 1 1
10 1 1 2
11 1 0 .
12 2 0 -1
13 2 1 0
14 2 1 1
15 2 1 2
我已经看到以下代码适用于每个人只进行一次治疗的情况,但遗憾的是,我无法找到一种方法来使其适应我的情况:
df %>%
group_by(id) %>%
mutate(relative_time = seq_along(treatment) - which(treatment %in% 1))
如有任何帮助,我们将不胜感激!