【发布时间】:2020-05-27 13:33:37
【问题描述】:
这类似于这个问题:Retain only the most recent date for every ID in a data frame。
区别在于,我使用的是 %Y%m%d%H%M 格式,所以是日期加时间。在这个例子中,确切的时间很重要。
我们可以使用以下数据框和方法作为一个非常简短的示例:
Event <- rep(1, 3)
Location <- c("a", "b", "c")
Date <- c(181905101300, 181905101453, 181905101613)
(df <- data.frame(Event, Location, Date))
Event Location Date
1 1 a 181905101300
2 1 b 181905101453
3 1 c 181905101613
(df %>%
group_by(Event) %>%
dplyr::slice(which.max(Date)))
# A tibble: 1 x 3
# Groups: Event [1]
Event Location Date
<dbl> <fct> <dbl>
1 1 c 181905101613
不过,我通常使用以下格式:
(df$Date <- strptime(df$Date, format="%Y%m%d%H%M"))
[1] "1819-05-10 13:00:00 LMT" "1819-05-10 14:53:00 LMT" "1819-05-10 16:13:00 LMT"
我怎样才能用这种格式达到同样的效果?是否可以?我尝试了“dplyr::slice”,但 POSIXlt 似乎有问题。
【问题讨论】:
-
我认为问题在于您使用的是
POSIXlt。如果你切换到POSIXct,应该没问题。正如答案所示,lubridate包使这很容易。 -
在
strptime()之后使用df$Date <- as.POSIXct(df$Date),你的方法就可以了。
标签: r