Найдите имя столбца с минимальной датой, используя dplyr - PullRequest
1 голос
/ 24 марта 2019

У меня есть следующий фрейм данных, я хочу найти имя столбца с минимальной датой для каждого идентификатора.

id   a_date       b_date         c_date        d_date     
1    2014-01-01   2014-01-05     2014-01-15    NA                   
2    2017-02-01   NA             NA            2015-03-01               

Что такое:

df <- tibble(id = c(1, 2),
             a_date = c("01/01/14", "01/02/17"),
             b_date = c("05/01/14", NA),
             c_date = c("15/01/14", NA),
             d_date = c(NA, "01/03/15"))

Я пробовал это, но не сработало

df  %>% group_by(id) %>% 
  mutate( min = pmin(a_date, b_date, c_date, d_date ,na.rm=TRUE) %>% 
  mutate(col_name = which(colnames(df)== min)

Ожидаемый результат будет как ниже

id   col_name    
1    a_date                 
2    d_date

1 Ответ

1 голос
/ 25 марта 2019

Как насчет этого?

df %>% 
  gather(key, date, -id) %>% 
  filter(!is.na(date)) %>% 
  mutate(date = dmy(date)) %>% 
  group_by(id) %>% 
  arrange(date) %>% 
  slice(1)

Он производит такой вывод:

# A tibble: 2 x 3
# Groups:   id [2]
     id key    date      
  <dbl> <chr>  <date>    
1     1 a_date 2014-01-01
2     2 d_date 2015-03-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...