从R数据帧中过滤出时间数据

时间:2019-04-11 09:48:12

标签: r

所以我在R中有一个数据集:

IncidentID         Time           Vehicle

 19002             4:48           Car
 19003             12:30          Motorcycle
 19004             14:00          Car
 19005             9:30           Bicycle

而且我正尝试过滤,因为它的数据集很大。以上只是一些数据示例。

我要根据时间过滤数据,也就是说我要获取时间 12pm至6pm之间的数据 strong>(24小时格式为18:00),因此我将:

IncidentID         Time         Vehicle

 19003             12:30        Motorcycle
 19004             14:00        Car

我做到了:

incident <- read.csv("incident.csv")
afternoon_incident <- incident[which(incident$Time >= 12 && incident$Time <= 18),]

但是我收到错误消息:

1: In Ops.factor(web$Time, 6:0) : ‘>=’ not meaningful for factors
2: In Ops.factor(web$Time, 12:0) : ‘<=’ not meaningful for factors

2 个答案:

答案 0 :(得分:2)

您可以使用Timehour字段转换为时间对象,然后提取library(lubridate) incident$Time <- hm(as.character(incident$Time)) incident[which(hour(incident$Time) >= 12 & hour(incident$Time) <= 18), ] 进行过滤:

<a id="Nav_Link1" href="/External/UserData">UserData</a>
<a id="Nav_Link2" href="/External/OwnerData">OwnerData</a>

答案 1 :(得分:0)

您需要先使用Timeas.POSIXct转换为实际的日期时间对象,然后进行比较。

您希望基于小时subset,我们可以使用format仅提取小时部分数据,并保留12到18个小时之间的行。使用基数R,我们可以做到

df$hour <- as.numeric(format(as.POSIXct(df$Time, format = "%H:%M"), "%H"))
subset(df, hour >= 12 & hour <= 18)

#  IncidentID  Time    Vehicle hour
#2      19003 12:30 Motorcycle   12
#3      19004 14:00        Car   14

如果不需要,您可以稍后删除hour列。


对于一般解决方案,我们可以创建一个日期时间列,然后进行比较

df$datetime <- as.POSIXct(df$Time, format = "%H:%M")
subset(df, datetime >= as.POSIXct("12:30:00", format = "%T") & 
           datetime <= as.POSIXct("18:30:00", format = "%T"))
相关问题