回答編集履歴
2
test
CHANGED
@@ -10,12 +10,11 @@
|
|
10
10
|
c("無治療", NA, "A", NA, NA)))
|
11
11
|
|
12
12
|
#
|
13
|
-
lst <- c("中断", "無治療", "無治療")
|
14
|
-
names(
|
13
|
+
next_tyra <- setNames(c("中断", "無治療", "無治療"), c("A", "中断", "無治療"))
|
15
14
|
data2 <- data %>%
|
16
15
|
group_by(id) %>%
|
17
16
|
mutate(
|
18
|
-
tyra = accumulate(tyra, ~ifelse(is.na(.y),
|
17
|
+
tyra = accumulate(tyra, ~ifelse(is.na(.y), next_tyra[last(.x)], .y))
|
19
18
|
) %>%
|
20
19
|
ungroup()
|
21
20
|
|
1
test
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
以下は `t
|
1
|
+
以下は `purrr::accumulate()` を利用する場合です。
|
2
|
-
|
3
2
|
```r
|
4
3
|
library(tidyverse)
|
5
4
|
|
@@ -10,27 +9,35 @@
|
|
10
9
|
c("無治療", NA, NA, "A", "A"),
|
11
10
|
c("無治療", NA, "A", NA, NA)))
|
12
11
|
|
13
|
-
data_out <- data.frame(
|
14
|
-
id = c(rep(1, 5), rep(2, 5), rep(3, 5)),
|
15
|
-
phase = c(rep(1:5,3)),
|
16
|
-
tyra = c(c("A", "A", "A", "中断", "無治療"),
|
17
|
-
c("無治療", "無治療", "無治療", "A", "A"),
|
18
|
-
c("無治療", "無治療", "A", "中断", "無治療")))
|
19
|
-
|
20
12
|
#
|
21
13
|
lst <- c("中断", "無治療", "無治療")
|
22
14
|
names(lst) <- c("A", "中断", "無治療")
|
23
15
|
data2 <- data %>%
|
24
16
|
group_by(id) %>%
|
25
|
-
mutate(across(tyra, ~{
|
26
|
-
|
17
|
+
mutate(
|
27
|
-
for (i in .x) {
|
28
|
-
|
18
|
+
tyra = accumulate(tyra, ~ifelse(is.na(.y), lst[last(.x)], .y))
|
29
|
-
}
|
30
|
-
v
|
31
|
-
|
19
|
+
) %>%
|
32
20
|
ungroup()
|
33
21
|
|
34
22
|
data2
|
23
|
+
|
24
|
+
# # A tibble: 15 × 3
|
25
|
+
# id phase tyra
|
26
|
+
# <dbl> <int> <chr>
|
27
|
+
# 1 1 1 A
|
28
|
+
# 2 1 2 A
|
29
|
+
# 3 1 3 A
|
30
|
+
# 4 1 4 中断
|
31
|
+
# 5 1 5 無治療
|
32
|
+
# 6 2 1 無治療
|
33
|
+
# 7 2 2 無治療
|
34
|
+
# 8 2 3 無治療
|
35
|
+
# 9 2 4 A
|
36
|
+
# 10 2 5 A
|
37
|
+
# 11 3 1 無治療
|
38
|
+
# 12 3 2 無治療
|
39
|
+
# 13 3 3 A
|
40
|
+
# 14 3 4 中断
|
41
|
+
# 15 3 5 無治療
|
35
42
|
```
|
36
43
|
|