【问题标题】:Filtring a data by time without a date按没有日期的时间过滤数据
【发布时间】:2020-05-23 19:45:42
【问题描述】:

我有一个数据框,其中包含“日期时间”列,其中包含数据为整数。我想在此列中按时间过滤它,但没有日期。因此,例如来自具有如下列的数据框:

2020-02-04 00:00:01
2020-03-01 00:00:02
2020-03-02 00:01:01
2020-04-06 00:00:31

我只想获取 00:00:00 到 00:01:00 之间的数据,所以:

2020-02-04 00:00:01
2020-03-01 00:00:02
2020-04-06 00:00:31

(或无日期,过滤后不需要此栏)

我试过用 format():

df$datetime <- format(as.POSIXct(df$datetime), format("%H:%M:%S"))

但是它将列中的每个单元格替换为 00:00:00。如果有任何帮助,我将不胜感激:)

【问题讨论】:

    标签: r date datetime


    【解决方案1】:

    另一个选择是使用 grepl 和过滤器,因为您需要特定的值。

    y = data.frame(value = c("2020-02-04 00:00:01","2020-03-01 00:00:02", "2020-03-02 00:01:01","2020-04-06 00:00:31"))
    filter(y, grepl(" 00:00:[0-9]*$", value))
    

    【讨论】:

      【解决方案2】:

      一种方法是使用lubridate 将小时、分钟和秒提取到它们自己的列中。然后很容易过滤。

      library(dplyr)
      library(lubridate)
      data %>% 
        mutate(Hour = hour(TimeStamp),
               Minute = minute(TimeStamp),
               Second = second(TimeStamp)) %>%
        dplyr::filter(Hour == 0 & (Minute == 0 | Minute == 1 & Second == 0))
                  TimeStamp Hour Minute Second
      1 2020-02-04 00:00:01    0      0      1
      2 2020-03-01 00:00:02    0      0      2
      3 2020-04-06 00:00:31    0      0     31
      

      【讨论】:

      • 谢谢!我不知道解决方案这么简单
      • 我很高兴它帮助了@Aleksandra!如果某个答案解决了您的问题,请考虑使用左侧的灰色复选标记接受它。
      • 不幸的是,我收到以下错误:视图中的警告:tz():不知道如何计算类因子对象的时区;返回“UTC”。此警告将在 lubridate 的下一个主要版本中成为错误。问题可能与此列的类型有关。这是 intieger 没有 POSIXct
      猜你喜欢
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 2021-09-01
      • 2021-12-27
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多