Создать индексный столбец по группам по дате и идентификатору - PullRequest
0 голосов
/ 07 апреля 2020

R / Stackoverflow newb ie здесь.

У меня есть набор данных, который выглядит следующим образом:

    year mother_id   nest_seq incubation_date
   <int> <chr>          <int> <date>         
 1  1994 543762-MMM         1 1994-10-16     
 2  1994 543762-MMM         3 1994-11-06     
 3  1994 543762-MMM         4 1994-11-24     
 4  1994 543762-MMM         6 1994-12-05     
 5  1995 583809-mGMW        4 1994-10-24     
 6  1995 583809-mGMW        7 1994-11-21     
 7  1995 583809-mGMW        8 1994-12-22     
 8  1996 596751-BWM         1 1994-11-20     
 9  1996 596751-BWM         2 1994-12-23     
10  1996 626691-GBW         2 1994-11-08

Я просто хочу сгенерировать новый nest_seq на основе incubation_date Например:

 year mother_id   nest_seq incubation_date new_nest_seq
   <int> <chr>          <int> <date>         <int>
 1  1994 543762-MMM         1 1994-10-16        1
 2  1994 543762-MMM         3 1994-11-06        2
 3  1994 543762-MMM         4 1994-11-24        3
 4  1994 543762-MMM         6 1994-12-05        4

Я пытался сделать это, используя if_else(), но застрял ...

group_by(year, mother_id) %>%
mutate(new_nest_seq = if_else(min(incubation_date), 1, ?)))

Буду очень признателен за любой совет ...

1 Ответ

0 голосов
/ 07 апреля 2020

Попробуйте это:

library(dplyr)

df %>%
  # Just in case: order 
  arrange(year, mother_id, incubation_date) %>% 
  group_by(year, mother_id) %>%
  # Create new index
  mutate(
    new_nest_seq = 1, 
    new_nest_seq = cumsum(new_nest_seq)) %>% 
  ungroup()
#> # A tibble: 10 x 5
#>     year mother_id   nest_seq incubation_date new_nest_seq
#>    <int> <fct>          <int> <fct>                  <dbl>
#>  1  1994 543762-MMM         1 1994-10-16                 1
#>  2  1994 543762-MMM         3 1994-11-06                 2
#>  3  1994 543762-MMM         4 1994-11-24                 3
#>  4  1994 543762-MMM         6 1994-12-05                 4
#>  5  1995 583809-mGMW        4 1994-10-24                 1
#>  6  1995 583809-mGMW        7 1994-11-21                 2
#>  7  1995 583809-mGMW        8 1994-12-22                 3
#>  8  1996 596751-BWM         1 1994-11-20                 1
#>  9  1996 596751-BWM         2 1994-12-23                 2
#> 10  1996 626691-GBW         2 1994-11-08                 1

Или через dplyr::row_number:

df %>%
  # Just in case: order 
  arrange(year, mother_id, incubation_date) %>% 
  group_by(year, mother_id) %>%
  # Create new index
  mutate(new_nest_seq = dplyr::row_number()) %>% 
  ungroup()

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

...