所以我在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
答案 0 :(得分:2)
您可以使用Time
将hour
字段转换为时间对象,然后提取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)
您需要先使用Time
将as.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"))