我想制作一个除特定时间段之外的数据集

时间:2016-08-08 04:11:44

标签: r

我的数据集有时间栏

time
2016-07-29 05:24:00
2016-07-29 05:24:00
2016-07-29 03:56:00
2016-07-29 03:56:00
2016-07-29 03:48:00
2016-07-29 03:48:00
2016-07-29 03:44:00
2016-07-29 03:44:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-30 04:15:00
2016-07-30 04:15:00
2016-07-30 04:15:00
2016-07-30 04:15:00
2016-07-30 14:15:00
2016-07-30 14:15:00
2016-07-30 14:15:00
2016-07-30 14:15:00
...

我想创建一个除特定时间段之外的数据集 如果我选择除00:00~06:00之外的行数据

time
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-29 23:00:00
2016-07-30 14:15:00
2016-07-30 14:15:00
2016-07-30 14:15:00
2016-07-30 14:15:00
...

2 个答案:

答案 0 :(得分:3)

您可以使用hour中的lubridate

df[lubridate::hour(df$time) > 6,]

假设df是您的数据框,且time已采用POSIXct格式

@thelatemail建议的base R中的其他选项:

df[with(as.POSIXlt(df$time), hour > 6),]

df[format(df$time,"%H") > "06",]

答案 1 :(得分:1)

我们使用format提取'时间'部分,然后转换为POSIXct(具有相同的日期),然后为'06:00'时间创建另一个日期时间向量,使用逻辑运算符(>)并对行进行子集化。

v1 <- as.POSIXct(format(as.POSIXct(df1$time), "%H:%M"), format = "%H:%M")
s2 <- as.POSIXct("06:00", format = "%H:%M")
df1[v1 > s2, , drop=FALSE]
#                 time
#9  2016-07-29 23:00:00
#10 2016-07-29 23:00:00
#11 2016-07-29 23:00:00
#12 2016-07-29 23:00:00
#13 2016-07-29 23:00:00
#14 2016-07-29 23:00:00
#19 2016-07-30 14:15:00
#20 2016-07-30 14:15:00
#21 2016-07-30 14:15:00
#22 2016-07-30 14:15:00

或另一个base R选项是

df1[as.numeric(gsub(".*\\s+|:.*", "", df1$time)) > 6,, drop= FALSE]

或者使用strptime,提取hour并执行逻辑条件

df1[strptime(df1$time, format = "%Y-%m-%d %H:%M:%S")$hour,]

注意:我们没有使用任何外部包。

或者我们可以使用data.table

library(data.table)
setDT(df1)[hour(time)>6]
#                   time
# 1: 2016-07-29 23:00:00
# 2: 2016-07-29 23:00:00
# 3: 2016-07-29 23:00:00
# 4: 2016-07-29 23:00:00
# 5: 2016-07-29 23:00:00
# 6: 2016-07-29 23:00:00
# 7: 2016-07-30 14:15:00
# 8: 2016-07-30 14:15:00
# 9: 2016-07-30 14:15:00
#10: 2016-07-30 14:15:00

数据

 df1 <- structure(list(time = c("2016-07-29 05:24:00", "2016-07-29 05:24:00", 
 "2016-07-29 03:56:00", "2016-07-29 03:56:00", "2016-07-29 03:48:00", 
 "2016-07-29 03:48:00", "2016-07-29 03:44:00", "2016-07-29 03:44:00", 
 "2016-07-29 23:00:00", "2016-07-29 23:00:00", "2016-07-29 23:00:00", 
 "2016-07-29 23:00:00", "2016-07-29 23:00:00", "2016-07-29 23:00:00", 
 "2016-07-30 04:15:00", "2016-07-30 04:15:00", "2016-07-30 04:15:00", 
 "2016-07-30 04:15:00", "2016-07-30 14:15:00", "2016-07-30 14:15:00", 
 "2016-07-30 14:15:00", "2016-07-30 14:15:00")), .Names = "time", 
 class = "data.frame", row.names = c(NA, -22L))