【问题标题】:Keep only the most recent date只保留最近的日期
【发布时间】:2020-04-02 18:36:18
【问题描述】:

我有这个数据

data;code
18/02/2020;C106
05/04/2018;C107
11/09/2016;C107
16/02/2019;C109
11/03/2020;C110
04/03/2020;C114
18/02/2020;C114
06/02/2020;C121

我想为每个代码选择最近的日期,如下所示:

data;code
18/02/2020;C106
05/04/2018;C107
16/02/2019;C109
11/03/2020;C110
04/03/2020;C114
06/02/2020;C121

我试过了:

tapply(data$data, data$code, max)

但我收到了这个:

Error in Summary.factor(7L, na.rm = FALSE) : 
  ‘max’ not meaningful for factors 

【问题讨论】:

    标签: r datatable


    【解决方案1】:

    对于dplyr,在按'code'分组后,slicedata所在行是max

    library(dplyr)
    library(lubridate)
    data %>%
        group_by(code) %>%
        slice(which.max(dmy(data)))
    

    或者在base R,我们可以使用aggregate

    aggregate(cbind(data = as.Date(data, '%d/%m/%Y')) ~ code, data, max)
    

    【讨论】:

      【解决方案2】:

      这使用dplyr 和lubridate 来格式化data 列,按code 列分组,并过滤​​每个code 的最近(last)日期。

      library(dplyr)
      library(lubridate)
      
      df %>% 
        mutate(data = dmy(data)) %>% 
        group_by(code) %>% 
        filter(data == last(data))
      

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        相关资源
        最近更新 更多