使用dplyr查找最短日期的列名称

时间:2019-03-24 18:38:56

标签: r dplyr

我有以下数据框,我想找到每个ID的最小日期的列名。

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 个答案:

答案 0 :(得分:1)

怎么样?

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