提问人:Aleksandra 提问时间:5/24/2020 更新时间:5/24/2020 访问量:439
按时间过滤数据,不带日期
Filtring a data by time without a date
问:
我有一个数据框,列为“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。我将不胜感激任何帮助:)
答:
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))
评论