R中具有时间条件的子集数据集

R中具有时间条件的子集数据集,r,time,subset,R,Time,Subset,我有一个这样的数据集 example.txt "09/Jan/2016" "05:00:22" "304" 449 "09/Jan/2016" "07:00:12" "304" 449 "09/Jan/2016" "10:00:02" "200" 10575 "09/Jan/2016" "11:00:03" "304" 449 "09/Jan/2016" "13:00:03" "304" 449 "09/Jan/2016" "20:00:03" "304" 449 "09/Jan/2016"

我有一个这样的数据集 example.txt

"09/Jan/2016" "05:00:22" "304" 449
"09/Jan/2016" "07:00:12" "304" 449
"09/Jan/2016" "10:00:02" "200" 10575
"09/Jan/2016" "11:00:03" "304" 449
"09/Jan/2016" "13:00:03" "304" 449
"09/Jan/2016" "20:00:03" "304" 449 
"09/Jan/2016" "23:00:03" "304" 450 
"10/Jan/2016" "00:00:03" "304" 449 
"10/Jan/2016" "03:00:03" "304" 449 
"10/Jan/2016" "04:00:03" "304" 449 
我可以在运行R中的代码前6小时从范围中对数据集进行子集划分吗? 例如,我在1月10日4:15打开并运行我的代码,所以我希望从我的数据集中得到子集,如

"09/Jan/2016" "23:00:03" "304" 450 
"10/Jan/2016" "00:00:03" "304" 449 
"10/Jan/2016" "03:00:03" "304" 449 
"10/Jan/2016" "04:00:03" "304" 449 
我的问题应该使用什么函数?以及如何使用它?

和软件包结合使用时,对于处理日期和时间而言,功能强大且富有表现力:

library(readr)
library(chron)
library(lubridate)

# read the data in
df_foo = read_table(file = '"09/Jan/2016" "05:00:22" "304" 449
"09/Jan/2016" "07:00:12" "304" 449
"09/Jan/2016" "10:00:02" "200" 10575
"09/Jan/2016" "11:00:03" "304" 449
"09/Jan/2016" "13:00:03" "304" 449
"09/Jan/2016" "20:00:03" "304" 449 
"09/Jan/2016" "23:00:03" "304" 450 
"10/Jan/2016" "00:00:03" "304" 449 
"10/Jan/2016" "03:00:03" "304" 449 
"10/Jan/2016" "04:00:03" "304" 449', 
                    col_names = c("Date", "Time", "Value1", "Value2"))

# parse dates and times
df_foo = df_foo %>% 
  mutate(
    # parse the dates
    Date = as.Date(gsub('"', "", Date), format = "%d/%b/%Y"),
    # parse the times
    Time = times(format(gsub('"', "", Time), format = "%H:%M:%S")),
    Value1 = as.integer(gsub('"', "", Value1)),
    # datetime
    Datetime = ISOdatetime(
      month = month(Date), 
      day = days(Date), 
      hour = hours(Time),
      sec = seconds(Time),
      min = minutes(Time),
      year = year(Date)
    )
  )

# filter to data within 6 hours of the current time
df_foo %>% 
  filter(
    Datetime > Sys.time() - dhours(6)
  )

显然,考虑到问题中包含的数据样本,这不会返回任何结果

假设您有4列,名称分别为
V1
V2
V3
V4
,数据框为
df

您可以在
base R
中通过

mergedDateTime <- as.POSIXct(paste(df$V1, df$V2), format = "%d/%b/%Y %H:%M:%S")
df[(Sys.time() - 6*60*60) <  mergedDateTime & Sys.time() > mergedDateTime, ]
mergedDateTime mergedDateTime,]
对于给定的示例,它的作用如下:

x <- "01/10/2016 04:15:00"
mergedDateTime <- as.POSIXct(paste(df$V1, df$V2), format = "%d/%b/%Y %H:%M:%S")
df[(as.POSIXct(x, format = "%m/%d/%Y %H:%M:%S") - 6*60*60) <  mergedDateTime & 
                as.POSIXct(x, format = "%m/%d/%Y %H:%M:%S") > mergedDateTime, ]


#        V1       V2      V3  V4
#7  09/Jan/2016 23:00:03 304 450
#8  10/Jan/2016 00:00:03 304 449
#9  10/Jan/2016 03:00:03 304 449
#10 10/Jan/2016 04:00:03 304 449

x这在lubridate中可以做得简单得多-
parse_date_time(粘贴(df_foo$date,df_foo$time),orders=“dmyHMS”)
例如,甚至在base R中,它只有一行-
as.POSIXct(粘贴(df_foo$date,df_foo$time),format=“%d/%b/%Y%H:%M:%S”,tz=“UTC”)
@您指的是日期时间结构吗?我的版本也是对
ISOdatetime
的一次调用。无法在两个版本中看到经济性。