如何在 R 中匹配两个具有约束的数据框?

How to match two data frame with constraints in R?

我有两种数据集

一个是人上电梯的数据,一个是电梯到一楼的数据

这是乘过电梯的人的数据

usercode    board time(sec) 
1           165 
2           167 
3           170 
4           340 
5           351 
6           820 
7           830 
8           1200    
9           1201    
10          1400    

这是电梯时刻表的数据

elevator code   arrival time
1               164
2               338
3               813
4               1175
5               1367

我想要的是

usercode    board time(sec) elevator code     elevator arrival time
1           165                 1                   164
2           167                 1                   164
3           170                 1                   164
4           340                 2                   338
5           351                 2                   338
6           820                 3                   813
7           830                 3                   813
8           1200                4                   1175
9           1201                4                   1175
10          1400                5                   1367

救救我!!请

将第一个数据作为 dat1,将第二个数据作为 dat2 我们可以这样做:

  transform(dat1,add=dat2[rowSums(outer(dat1[,2],dat2[,2],">")),],row.names=NULL)

   usercode arrival_time.sec. add.elevator_code add.arrival_time
1         1               165                 1              164
2         2               167                 1              164
3         3               170                 1              164
4         4               340                 2              338
5         5               351                 2              338
6         6               820                 3              813
7         7               830                 3              813
8         8              1200                 4             1175
9         9              1201                 4             1175
10       10              1400                 5             1367

您可能要考虑在 data.table 中使用滚动连接,如下所示:

arrival[people, on="arrivaltime_sec", roll=Inf]

#     elevatorcode arrivaltime arrivaltime_sec usercode
#  1:            1         164             165        1
#  2:            1         164             167        2
#  3:            1         164             170        3
#  4:            2         338             340        4
#  5:            2         338             351        5
#  6:            3         813             820        6
#  7:            3         813             830        7
#  8:            4        1175            1200        8
#  9:            4        1175            1201        9
# 10:            5        1367            1400       10

数据:

library(data.table)

people <- fread("usercode,arrivaltime_sec
1,165
2,167
3,170
4,340
5,351
6,820
7,830
8,1200
9,1201
10,1400")

arrival <- fread("elevatorcode,arrivaltime
1,164
2,338
3,813
4,1175
5,1367")

arrival[, arrivaltime_sec := arrivaltime]