【发布时间】:2017-05-26 21:37:00
【问题描述】:
我有一组变量,其中包含有关某人是否曾经患有某些健康状况的数据。例如,“你有没有心脏病发作过?”
如果他们在观察 2 中说“是”,那么观察 3 和 4 的答案仍然是肯定的。但是,观察 1 不一定是肯定的。心脏病发作可能发生在观察 1 和 2 之间。
如果他们在观察 2 中说“不”,那么在观察 1 中的答案是否定的。但是,在观察 3 或 4 中不一定是否定的。
这是一个可重现的例子:
df <- tibble(
id = rep(1:3, each = 4),
obs = rep(1:4, times = 3),
mi_ever = c(NA, 0, 1, NA, NA, 0, NA, NA, NA, 1, NA, NA)
)
df
id obs mi_ever
1 1 1 NA
2 1 2 0
3 1 3 1
4 1 4 NA
5 2 1 NA
6 2 2 0
7 2 3 NA
8 2 4 NA
9 3 1 NA
10 3 2 1
11 3 3 NA
12 3 4 NA
使用 zoo::na.locf 将我的 0(否)向后移动 或将我的 1(是)向前移动是微不足道的。但是,我不确定如何将 0 向后 和 1 向前。理想情况下,我想要以下结果:
id obs mi_ever mi_ever_2
1 1 1 NA 0
2 1 2 0 0
3 1 3 1 1
4 1 4 NA 1
5 2 1 NA 0
6 2 2 0 0
7 2 3 NA NA
8 2 4 NA NA
9 3 1 NA NA
10 3 2 1 1
11 3 3 NA 1
12 3 4 NA 1
我查看了以下帖子,但似乎没有一篇能完全涵盖我在这里要问的内容。
Carry last Factor observation forward and backward in group of rows in R
Forward and backward fill data frame in R
making a "dropdown" function in R
感谢任何帮助。
【问题讨论】: