我的数据集有时间栏
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
...
答案 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))