我有这个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
。
答案 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