按R中指定的时间段对数据行进行分类

按R中指定的时间段对数据行进行分类,r,R,我在按时间对数据进行分类时遇到了一些问题。 下面是它的样子: 我有一个数据列表,其中指定了每个时段的开始时间和结束时间: Period Start END 1 A1 11:08:58 11:11:58 2 A2 12:08:58 12:11:58 3 A3 13:08:58 13:11:58 4 A4 14:08:58 14:11:58 5 A5 15:08:58 15:11:58 6 A6 16:08:58 16

我在按时间对数据进行分类时遇到了一些问题。 下面是它的样子:

我有一个数据列表,其中指定了每个时段的开始时间和结束时间:

   Period    Start      END
1      A1 11:08:58 11:11:58
2      A2 12:08:58 12:11:58
3      A3 13:08:58 13:11:58
4      A4 14:08:58 14:11:58
5      A5 15:08:58 15:11:58
6      A6 16:08:58 16:11:58
7      A7 17:08:58 17:11:58
8      A8 18:08:58 18:11:58
9      A9 19:08:58 19:11:58
10    A10 20:08:58 20:11:58
11    A11 21:08:58 21:11:58
12    A12 22:08:58 22:11:58
13    A13 23:08:58 23:11:58
14    A14 00:08:58 00:11:58
15    A15 01:08:58 01:11:58
16    A16 02:08:58 02:11:58
17    A17 03:08:58 03:11:58
18    A18 04:08:58 04:11:58
19    A19 05:08:58 05:11:58
20    A20 06:08:58 06:11:58
我还有另一个列表,其中指定了每个事务发生的时间:

Transaction Transaction.Time
1        TR015         12:10:58
2        TR008         18:10:58
3        TR009         13:10:58
4        TR019         14:10:58
5        TR001         15:10:58
6        TR011         16:10:58
7        TR018         17:10:58
8        TR005         11:10:58
9        TR013         19:10:58
10       TR012         20:10:58
11       TR014         21:10:58
12       TR004         22:10:58
13       TR020         23:10:58
14       TR010         00:10:58
15       TR016         01:10:58
16       TR007         02:10:58
17       TR017         03:10:58
18       TR006         04:10:58
19       TR003         05:10:58
20       TR002         06:10:58
我尝试合并这两个列表,以了解每个事务发生的时间,如:

   Transaction Transaction.Time Period    Start      END
1        TR015         12:10:58 A2        12:08:58 12:11:58
2        TR008         18:10:58 A8        18:08:58 18:11:58
3        TR009         13:10:58 A3        13:08:58 13:11:58

我假设您的数据帧有以下名称: df_period:用于时间段的数据帧 事务_发生:对于事务的数据帧(必须为列)


df我将创建一个可复制的示例,如下所示:

period = read_delim('No Period Start END
1 A1 11:08:58 11:11:58
2 A2 12:08:58 12:11:58
3 A3 13:08:58 13:11:58
4 A4 14:08:58 14:11:58
5 A5 15:08:58 15:11:58
6 A6 16:08:58 16:11:58
7 A7 17:08:58 17:11:58
8 A8 18:08:58 18:11:58
9 A9 19:08:58 19:11:58
10 A10 20:08:58 20:11:58
11 A11 21:08:58 21:11:58
12 A12 22:08:58 22:11:58
13 A13 23:08:58 23:11:58
14 A14 00:08:58 00:11:58
15 A15 01:08:58 01:11:58
16 A16 02:08:58 02:11:58
17 A17 03:08:58 03:11:58
18 A18 04:08:58 04:11:58
19 A19 05:08:58 05:11:58
20 A20 06:08:58 06:11:58', delim = ' ')

tnx = read_delim('No Transaction Time
1 TR015 12:10:58
2 TR008 18:10:58
3 TR009 13:10:58
4 TR019 14:10:58
5 TR001 15:10:58
6 TR011 16:10:58
7 TR018 17:10:58
8 TR005 11:10:58
9 TR013 19:10:58
10 TR012 20:10:58
11 TR014 21:10:58
12 TR004 22:10:58 
13 TR020 23:10:58
14 TR010 00:10:58
15 TR016 01:10:58
16 TR007 02:10:58
17 TR017 03:10:58
18 TR006 04:10:58
19 TR003 05:10:58
20 TR002 06:10:58', delim = ' ')
要定位时间段,您必须能够将其转换为某种日期-时间格式,这里日期是不相关的,因此您可以将解析它的函数保留在任何日期中,仍然有效。此外,还必须确保周期数据完整,这意味着没有时间戳超出范围

require(lubridate)
require(tidyverse)
period = period %>% mutate(Start = as_datetime(Start),
                           END = as_datetime(END))

tnx = tnx %>% mutate(Time = as_datetime(Time))

locate_period = function(time_stamp, period_data) {
  period_data = period_data %>% filter(Start <= time_stamp) %>% filter(END >= time_stamp)
  period_data$Period[[1]]
}

tnx$Period = ''

for (i in 1:nrow(tnx)) {
  tnx$Period[[i]] = locate_period(tnx$Time[[i]], period)
}

tnx = left_join(tnx, period, by = 'Period')
require(润滑油)
要求(整洁的人)
period=period%>%变异(Start=as_datetime(Start),
结束=截止日期时间(结束))
tnx=tnx%>%变异(时间=as_datetime(时间))
定位周期=函数(时间戳、周期数据){
期间数据=期间数据%>%筛选器(开始%筛选器(结束>=时间戳)
期间\数据$period[[1]]
}
tnx$期间=“”
适用于(i/1:nrow(tnx)){
tnx$Period[[i]]=locate_Period(tnx$Time[[i]],Period)
}
tnx=左联合(tnx,句点,by='period')

请提供可复制的数据
require(lubridate)
require(tidyverse)
period = period %>% mutate(Start = as_datetime(Start),
                           END = as_datetime(END))

tnx = tnx %>% mutate(Time = as_datetime(Time))

locate_period = function(time_stamp, period_data) {
  period_data = period_data %>% filter(Start <= time_stamp) %>% filter(END >= time_stamp)
  period_data$Period[[1]]
}

tnx$Period = ''

for (i in 1:nrow(tnx)) {
  tnx$Period[[i]] = locate_period(tnx$Time[[i]], period)
}

tnx = left_join(tnx, period, by = 'Period')