按时间过滤数据,不带日期

Filtring a data by time without a date

提问人:Aleksandra 提问时间:5/24/2020 更新时间:5/24/2020 访问量:439

问:

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

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 日期时间

评论


答:

1赞 Ian Campbell 5/24/2020 #1

一种方法是将小时、分钟和秒提取到它们自己的列中。然后就很容易过滤了。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

评论

0赞 Aleksandra 5/24/2020
谢谢!我不知道解决方案如此简单
0赞 Aleksandra 5/24/2020
不幸的是,我收到了以下错误:视图中的警告:tz():不知道如何计算类因子对象的时区;返回“UTC”。此警告将在润滑剂的下一个主要版本中成为错误。问题可能出在此列的类型上。It's intieger no POSIXct
3赞 Shan R 5/24/2020 #2

另一种选择是使用 grepl 和 filter,因为您需要特定的值。

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))