У меня есть 2 таблицы данных, которые я хотел бы объединить, связав строки.Ниже приведены значения данных:
>dput(x)
structure(list(NN = c("test", "test", "test", "test", "test"),
gpn = c("gas", "gas", "gas", "gas", "gas"), sitename = c("agip",
"agip", "agip", "agip", "agip"), code = c("F123", "F123",
"F123", "F123", "F123"), Brand = c("bp", "shell", "ionic",
"meta", "robo"), starttime = structure(c(1533097609, 1533118867,
1533183999, 1533270359, 1533356437), class = c("POSIXct",
"POSIXt"), tzone = ""), endtime = structure(c(1533118867,
1533183999, 1533270359, 1533356437, 1533443068), class = c("POSIXct",
"POSIXt"), tzone = ""), price = c(1.592, 1.592, 1.598, 1.598,
1.598), otherprice = c(1.998, 2.11, 2.114, 2.134, 1.989)), .Names = c("NN",
"gpn", "sitename", "code", "Brand", "starttime", "endtime", "price",
"otherprice"), row.names = c(NA, -5L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x00000000025c0788>)
>dput(y)
structure(list(NN = c("test", "test", "test", "test", "test"),
gpn = c("gas", "gas", "gas", "gas", "gas"), sitename = c("agip",
"agip", "agip", "agip", "agip"), code = c("F123", "F123",
"F123", "F123", "F123"), Brand = c("dino", "dino", "dino",
"dino", "dino"), otherprice = c(1.987, 2.456, 3.456, 1.989,
1.99), starttime = structure(c(1533097399, 1533118999, 1533184999,
1533271999, 1533359357), tzone = "", class = c("POSIXct",
"POSIXt")), endtime = structure(c(1533118100, 1533182999,
1533270000, 1533356000, 1533443000), class = c("POSIXct",
"POSIXt"), tzone = "")), .Names = c("NN", "gpn", "sitename",
"код", "бренд", "другая цена", "время начала", "время окончания"), класс = c ("data.table", "data.frame)"), .internal.selfref =)
Я бы хотел связать строки от y до x так, чтобы совпадало следующее:
псевдокод:
If (NN,код из 'x' соответствует NN, код из 'y') & 'x $ starttime' <'y $ starttime' & 'x $ endtime'> 'y $ endtime'
Тогда получите NN, код,бренд, цена от 'y' и результирующий кадр станет:
NN gpn sitename code Brand starttime endtime price otherprice
test gas agip F123 bp 01/08/2018 05:26 01/08/2018 11:21 1.592 1.998
test gas agip F123 shell 01/08/2018 11:21 02/08/2018 05:26 1.592 2.110
test gas agip F123 Ionic 02/08/2018 05:26 03/08/2018 05:25 1.598 2.114
test gas agip F123 meta 03/08/2018 05:25 04/08/2018 05:20 1.598 2.134
test gas agip F123 robo 04/08/2018 05:20 05/08/2018 05:24 1.598 1.989
test gas agip F123 dino 01/08/2018 05:26 01/08/2018 11:21 1.592 1.987
test gas agip F123 dino 01/08/2018 11:21 02/08/2018 05:26 1.592 2.456
test gas agip F123 dino 02/08/2018 05:26 03/08/2018 05:25 1.598 3.456
test gas agip F123 dino 03/08/2018 05:25 04/08/2018 05:20 1.598 1.989
test gas agip F123 dino 04/08/2018 05:20 05/08/2018 05:24 1.598 1.990
Я проверил InsertRow
и rbind
, но ни один не работает.
Есть идеи?
Спасибо.