在其他值之间创建二进制变量
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
我想创建一个二元变量,它对开始 = 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