回答編集履歴
2
    
        answer	
    CHANGED
    
    | 
         @@ -10,12 +10,11 @@ 
     | 
|
| 
       10 
10 
     | 
    
         
             
                       c("無治療", NA, "A", NA, NA)))
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            #
         
     | 
| 
       13 
     | 
    
         
            -
            lst <- c("中断", "無治療", "無治療")
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 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
    
        answer	
    CHANGED
    
    | 
         @@ -1,5 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            以下は ` 
     | 
| 
      
 1 
     | 
    
         
            +
            以下は `purrr::accumulate()` を利用する場合です。
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
2 
     | 
    
         
             
            ```r
         
     | 
| 
       4 
3 
     | 
    
         
             
            library(tidyverse)
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
         @@ -10,26 +9,34 @@ 
     | 
|
| 
       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 
     | 
    
         
             
            ```
         
     |