【问题标题】:Select only the most recent POSIXlt date/time仅选择最近的 POSIXlt 日期/时间
【发布时间】: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 &lt;- as.POSIXct(df$Date),你的方法就可以了。

标签: r


【解决方案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)

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 2014-09-17
    • 2014-06-11
    • 2012-04-15
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多