使用滞后变量,按组
Using lag variable, by group
我有一个看起来像这样的 df
,我需要 运行 一个代码来生成 change
。 change
定义为第一次永久正数outcome
(outcome
=1).
逻辑如下:
- 每个
ID
有 5 个 visits
,每个 visit
的 outcome
的值
- 如果
visit
x 的结果为 1
,则 change
变量只能为 1
,此后
- 例如,
id
2 在 time
2 处不能有 change
= 1,因为 outcome
在 time
3 处恢复为负结果.
- 另外一个问题是缺少数据。
id
3 在 visit
2 的潜在结果可能是 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
您可以使用 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))
我有一个看起来像这样的 df
,我需要 运行 一个代码来生成 change
。 change
定义为第一次永久正数outcome
(outcome
=1).
逻辑如下:
- 每个
ID
有 5 个visits
,每个visit
的 - 如果
visit
x 的结果为1
,则change
变量只能为1
,此后 - 例如,
id
2 在time
2 处不能有change
= 1,因为outcome
在time
3 处恢复为负结果. - 另外一个问题是缺少数据。
id
3 在visit
2 的潜在结果可能是 1 或 0。由于这次访问的值可能是 1,因此change
应该是 1。
outcome
的值
具有所需输出变量的我的数据是
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
您可以使用 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))