仅选择最新的POSIXlt日期/时间

时间:2020-05-27 13:33:37

标签: r

这类似于以下问题: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似乎有问题。

1 个答案:

答案 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)
相关问题