如何在 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]
我有两种数据集
一个是人上电梯的数据,一个是电梯到一楼的数据
这是乘过电梯的人的数据
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]