用id代替NA摸索并计算最新日期-R

时间:2019-02-14 14:12:52

标签: r date group-by nan

我有这个df

            id       date
230       1066 2018-01-22
231       1066 2018-01-26
232       1066 2018-01-21
233       1066 2018-01-20
234       1066 2018-01-18
235       1066 2018-01-19
236       1066 2018-01-22
237       1017       <NA>
238       1017 2018-03-09
239       1017       <NA>
240       1017       <NA>
241       1017       <NA>
242       1017 2018-05-16
243       1017 2018-05-16
244       1017 2018-03-29
245       1017 2018-05-16
246       1017 2018-05-16
247       1017       <NA>
248       1017       <NA>
249        442 2018-05-20
250        442 2018-05-17

我需要根据给定的最新日期对id进行分组,但是当该组具有NA时,它将提供NA而不是最新日期(最大值)值:

aggregate(df$date, by=list(df$id), max)

76     1066 2018-04-09
77     1017       <NA>
78      442 2018-05-20

我正在尝试找到一种替换它们的方法。我试图将它们替换为0(因为我正在寻找最大值):

df[is.na(df$date),c("date")] <- 0

但这给了我这个错误:

Error in as.Date.numeric(value) : 'origin' must be supplied

我不想将日期更改为数字,因为在此之后(当每个id仅具有一个日期时),我将需要提取每个id的月份和年份以进行一些条件计算。最后一个很简单,就是month()中的year()lubridate

1 个答案:

答案 0 :(得分:1)

library(tidyr)
library(dplyr)
library(lubridate)
df %>% mutate(date = ymd(date)) %>% group_by(id)  %>% summarize(max(date,na.rm = T))

# A tibble: 3 x 2
     id `max(date, na.rm = T)`
  <int>                 <date>
1   442             2018-05-20
2  1017             2018-05-16
3  1066             2018-01-26