在其他值之间创建二进制变量

Create a binary variable between other values

我想创建一个二元变量,它对开始 = S 和结束 = E 之间的所有 obs 取值 1,直到下一个开始 = S 出现时取 0,然后取 1 直到结束 = E 等等(见随附的)。 R 中有什么功能可以帮助我吗?

这样的怎么样

library(tidyverse)


df <- tribble(
 ~x,    ~start  ,~end,
 1,NA,NA,       
 2,NA,NA,       
 3,"S",NA,
 4,NA,NA,       
 5,NA,NA,       
 6,NA,"E",
 7,NA,NA,       
 8,NA,NA,       
 9,NA,NA,       
 10,"S",NA,
 11,NA,NA,      
 12,NA,"E")


df %>% mutate(start1 = ifelse(start == "S", 1, 0),
              end1 = ifelse(lag(end) == "E", 1, 0)   ) %>% 
  replace_na(list(start1 = 0, end1 = 0)) %>% 
  mutate(dif = start1 - end1,
         indicator = cumsum(dif)) %>% 
  select(x, start, end, indicator)

这给你:

# A tibble: 12 x 4
       x start end   indicator
   <dbl> <chr> <chr>     <dbl>
 1     1 NA    NA            0
 2     2 NA    NA            0
 3     3 S     NA            1
 4     4 NA    NA            1
 5     5 NA    NA            1
 6     6 NA    E             1
 7     7 NA    NA            0
 8     8 NA    NA            0
 9     9 NA    NA            0
10    10 S     NA            1
11    11 NA    NA            1
12    12 NA    E             1