R определяет новую переменную как начало отсчета при выполнении условия - PullRequest
0 голосов
/ 04 августа 2020

поэтому я пытаюсь добавить две новые переменные в свой фрейм данных. Переменная с именем start, которая должна быть текущим счетчиком от 0 до любого количества строк для одной группы, и вторая переменная с именем stop, которая практически такая же, но начинается с 1. Счетчик должен start, если значение второй переменной> 0. Кроме того, важно, чтобы счет продолжался до последнего значения группы (поэтому он не должен останавливаться, если снова Var1=0), и что NA игнорируются в том смысле, что счет продолжается. Рассмотрим следующий набор данных в качестве примера:

ID    Var1   start   stop
1      0
1      1       0      1
1      4       1      2 
1      2       2      3
1      NA      3      4
1      4       4      5
2      0
2      0
2      3       0      1
2      5       1      2
2      9       2      3
2      0       3      4

Меня действительно не волнуют значения start и stop, которые берутся до Var1>0, так что будь то 0 или NA не важно

Заранее большое спасибо за хорошие ответы !!

1 Ответ

0 голосов
/ 05 августа 2020

Грязное решение проблемы, вероятно, сработает, просто удалите лишние столбцы, которые я сделал в качестве шагов с select

library(tidyverse)


df_example <- read_table("ID    Var1   start   stop
1      0
1      1       0      1
1      4       1      2 
1      2       2      3
1      NA      3      4
1      4       4      5
2      0
2      0
2      3       0      1
2      5       1      2
2      9       2      3
2      0       3      4")

df_example %>%
  group_by(ID) %>% 
  mutate(greater_1 = if_else(replace_na(Var1,1) > 0,1,0),
         run_sum = cumsum(greater_1),
         to_fill = if_else(run_sum == 1,1,NA_real_)) %>% 
  fill(to_fill) %>% 
  mutate(end2 = cumsum(to_fill %>% replace_na(0)),
         star2 = if_else(end2 -1 > 0,end2 -1,0))
#> # A tibble: 12 x 9
#> # Groups:   ID [2]
#>       ID  Var1 start  stop greater_1 run_sum to_fill  end2 star2
#>    <dbl> <dbl> <dbl> <dbl>     <dbl>   <dbl>   <dbl> <dbl> <dbl>
#>  1     1     0    NA    NA         0       0      NA     0     0
#>  2     1     1     0     1         1       1       1     1     0
#>  3     1     4     1     2         1       2       1     2     1
#>  4     1     2     2     3         1       3       1     3     2
#>  5     1    NA     3     4         1       4       1     4     3
#>  6     1     4     4     5         1       5       1     5     4
#>  7     2     0    NA    NA         0       0      NA     0     0
#>  8     2     0    NA    NA         0       0      NA     0     0
#>  9     2     3     0     1         1       1       1     1     0
#> 10     2     5     1     2         1       2       1     2     1
#> 11     2     9     2     3         1       3       1     3     2
#> 12     2     0     3     4         0       3       1     4     3

Создано 2020-08-04 представителем пакет (v0.3.0)

...