我想創建一個二進制變數,它為 start = S 和 end = E 之間的所有 obs 取值 1 和 0 直到下一個 start = S 出現,然后 1 直到 end = E 等等(見附件)。R中有什么功能可以幫助我嗎?

uj5u.com熱心網友回復:
這樣的事情怎么樣
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451168.html
下一篇:IF這次沒想到
