这类似于以下问题: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似乎有问题。
答案 0 :(得分:1)
在这种情况下,您可能要使用lubridate
library(tidyverse)
library(lubridate)
Event <- c(1,1,2)
Location <- c("a", "b", "c")
Date <- c(181905101300, 181905101453, 181905101613)
df <- data.frame(Event, Location, Date)
df %>%
mutate(time_hour = ymd_hm(Date)) %>%
group_by(Event) %>%
top_n(1,wt = time_hour)