基于R中的多个时间段筛选/子集数据帧

基于R中的多个时间段筛选/子集数据帧,r,filter,subset,R,Filter,Subset,我需要使用多个时间段过滤或子集一个大的(100000+行)数据帧。我基本上需要删除数据框中日期/时间在时间段表中的开始日期/时间和结束日期/时间之间的行。我发现这篇文章描述了我的问题(),但我似乎无法让代码正常工作。任何建议都将不胜感激。参见下面的示例数据 time period table: start,end 7/26/2017 14:05,7/26/2017 16:05 8/24/2017 13:40,8/24/2017 15:40 6/29/2017 20:45,6/30/2017 0:

我需要使用多个时间段过滤或子集一个大的(100000+行)数据帧。我基本上需要删除数据框中日期/时间在时间段表中的开始日期/时间和结束日期/时间之间的行。我发现这篇文章描述了我的问题(),但我似乎无法让代码正常工作。任何建议都将不胜感激。参见下面的示例数据

time period table:
start,end
7/26/2017 14:05,7/26/2017 16:05
8/24/2017 13:40,8/24/2017 15:40
6/29/2017 20:45,6/30/2017 0:41

dataframe:
time,temp.c,lux,serial.num
6/29/2017 20:40,33.63,0,20168779
6/29/2017 20:40,33.11,0,20168780
6/29/2017 20:50,20.42,602.8,20148333
6/29/2017 20:50,20.32,721.2,20148334
6/29/2017 20:50,19.75,3788.9,20148335
7/26/2017 16:00,22.9,183,20168779
7/26/2017 16:00,23.29,1237.9,20168780
7/26/2017 16:10,23.38,1173.3,20148333
7/26/2017 16:10,23.67,839.6,20148334
8/24/2017 15:40,24.06,387.5,20168780
8/24/2017 15:50,23.58,0,20148332
数据:

time_period_table <- data.frame(start=c('7/26/2017 14:05', '8/24/2017 13:40', '6/29/2017 20:45'), end=c('7/26/2017 16:05', '8/24/2017 15:40', '6/30/2017 0:41'))
time_period_table $start <- as.POSIXct(time_period_table $start, format="%m/%d/%Y %H:%M")
time_period_table $end <- as.POSIXct(time_period_table $end, format="%m/%d/%Y %H:%M")

time_period_table
keep_by_date_time <- function(data_frame, start_date, start_time, end_date, end_time) {
    from <- paste(start_date, start_time)
    to <- paste(end_date, end_time)
    sub_frame <- subset(data_frame, start >= as.POSIXct(from) & end <= as.POSIXct(to))
    return(sub_frame)
}
# return rows with date and time between July 26, 2017 at 1:05pm and July 26, 2017 at 5:05pm:

keep_by_date_time(time_period_table, '2017-07-26', '13:05', '2017-07-26', '17:05')
remove_by_date_time <- function(data_frame, start_date, start_time, end_date, end_time) {
    from <- paste(start_date, start_time)
    to <- paste(end_date, end_time)
    rem_row <- which(time_period_table$start >= as.POSIXct(from) & time_period_table$end <= as.POSIXct(to))
    rem_frame <- data_frame[-rem_row,]
    return(rem_frame)
}
# remove rows with date and time between August 20, 2017 at 1:05pm and August 26, 2017 at 5:05pm:

remove_by_date_time(time_period_table, '2017-08-20', '13:05', '2017-08-26', '17:05')

删除数据框中日期/时间介于开始日期/时间和结束日期/时间之间的行:

time_period_table <- data.frame(start=c('7/26/2017 14:05', '8/24/2017 13:40', '6/29/2017 20:45'), end=c('7/26/2017 16:05', '8/24/2017 15:40', '6/30/2017 0:41'))
time_period_table $start <- as.POSIXct(time_period_table $start, format="%m/%d/%Y %H:%M")
time_period_table $end <- as.POSIXct(time_period_table $end, format="%m/%d/%Y %H:%M")

time_period_table
keep_by_date_time <- function(data_frame, start_date, start_time, end_date, end_time) {
    from <- paste(start_date, start_time)
    to <- paste(end_date, end_time)
    sub_frame <- subset(data_frame, start >= as.POSIXct(from) & end <= as.POSIXct(to))
    return(sub_frame)
}
# return rows with date and time between July 26, 2017 at 1:05pm and July 26, 2017 at 5:05pm:

keep_by_date_time(time_period_table, '2017-07-26', '13:05', '2017-07-26', '17:05')
remove_by_date_time <- function(data_frame, start_date, start_time, end_date, end_time) {
    from <- paste(start_date, start_time)
    to <- paste(end_date, end_time)
    rem_row <- which(time_period_table$start >= as.POSIXct(from) & time_period_table$end <= as.POSIXct(to))
    rem_frame <- data_frame[-rem_row,]
    return(rem_frame)
}
# remove rows with date and time between August 20, 2017 at 1:05pm and August 26, 2017 at 5:05pm:

remove_by_date_time(time_period_table, '2017-08-20', '13:05', '2017-08-26', '17:05')

谢谢您的代码。我必须删除多个数据帧的多组日期之间的数据。我已经尝试过这个代码,但我正在做的事情是不对的。另外,我希望数据框中的行不在关闭表中的日期之间。library(dplyr)library(lubridate)data_frame$time假装您有一个可以实现您想要的功能。它看起来像什么?是这样吗:删除带有这些日期的行(数据帧列表、开始日期列表)?同一组开始/结束日期适用于所有数据帧,还是每个数据帧都有自己的一组?是的,该函数将完成我需要做的事情。