【发布时间】:2019-07-08 14:23:11
【问题描述】:
我有这个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 的月份和年份来进行一些条件计算。最后一个非常简单,使用来自lubridate 的month() 和year()。
【问题讨论】:
-
na.rm参数为maxaggregate(df$date, by=list(df$id), max, na.rm = TRUE) -
你不能。如果您坚持将结果保留为 Date 类对象,则没有有效的“0”值。
-
如果是将NA替换为max date,则
library(dplyr); df %>% group_by(id) %>% mutate(date = zoo::na.aggregate(date, max, na.rm = FALSE)) -
@42- 我不需要用“0”值替换它们。我只需要用一些东西替换 NA 或试图找出一种忽略它们的方法,以获得每个 id 的最新日期。
-
如果您要指定一个有效的日期,那么您可以使用
[.Date<-分配给它。我不知道为什么 akrun 建议使用 dplyr 转换为 POSIXct,因为问题涉及 Date 分类向量。