R 在第一次出现后用纵向数据中的观察值填充所有观察值
R Filling all observations after first occurrence with that observation in longitudinal data
我在这个table的左边设置了数据,但我想在右边生成数据:
ID
A
-->
ID
A
B
1
0
1
0
0
1
0
1
0
0
1
1
1
1
1
1
0
1
0
1
2
0
2
0
0
2
1
2
1
1
2
0
2
0
1
2
0
2
0
1
2
0
2
0
1
我想生成 B 列,它在 A 列中第一次出现 1 之前一直为 0,然后用 ID 从 A 中的第一个观察结果中的 1 填充后续观察结果。我什至不知道从哪里开始。
如果有人可以提供帮助,我将不胜感激
也许我们可以试试
transform(
df,
B = +ave(A==1, ID, FUN = cumsum)
)
library(tidyverse)
df <-
structure(list(
ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
A = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L)
),
class = "data.frame",
row.names = c(NA,-9L))
df %>%
group_by(ID) %>%
mutate(B = cummax(A)) %>%
ungroup()
#> # A tibble: 9 x 3
#> ID A B
#> <int> <int> <int>
#> 1 1 0 0
#> 2 1 0 0
#> 3 1 1 1
#> 4 1 0 1
#> 5 2 0 0
#> 6 2 1 1
#> 7 2 0 1
#> 8 2 0 1
#> 9 2 0 1
由 reprex package (v2.0.1)
于 2021-09-28 创建
我在这个table的左边设置了数据,但我想在右边生成数据:
ID | A | --> | ID | A | B |
---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | |
1 | 0 | 1 | 0 | 0 | |
1 | 1 | 1 | 1 | 1 | |
1 | 0 | 1 | 0 | 1 | |
2 | 0 | 2 | 0 | 0 | |
2 | 1 | 2 | 1 | 1 | |
2 | 0 | 2 | 0 | 1 | |
2 | 0 | 2 | 0 | 1 | |
2 | 0 | 2 | 0 | 1 |
我想生成 B 列,它在 A 列中第一次出现 1 之前一直为 0,然后用 ID 从 A 中的第一个观察结果中的 1 填充后续观察结果。我什至不知道从哪里开始。 如果有人可以提供帮助,我将不胜感激
也许我们可以试试
transform(
df,
B = +ave(A==1, ID, FUN = cumsum)
)
library(tidyverse)
df <-
structure(list(
ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
A = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L)
),
class = "data.frame",
row.names = c(NA,-9L))
df %>%
group_by(ID) %>%
mutate(B = cummax(A)) %>%
ungroup()
#> # A tibble: 9 x 3
#> ID A B
#> <int> <int> <int>
#> 1 1 0 0
#> 2 1 0 0
#> 3 1 1 1
#> 4 1 0 1
#> 5 2 0 0
#> 6 2 1 1
#> 7 2 0 1
#> 8 2 0 1
#> 9 2 0 1
由 reprex package (v2.0.1)
于 2021-09-28 创建