Объедините или объедините два фрейма данных с неравными строками и заполните пробелы ближайшими значениями instdead NA в R - PullRequest
0 голосов
/ 02 августа 2020

Я хочу объединить два фрейма данных в соответствии с ближайшим временем, как показано ниже,

   > df1

           Time           Var1   Var2
01/01/2019 01:10:00       "A"    "D"
02/01/2019 01:10:00       "B"    "E"
03/01/2019 01:10:00       "C"    "F"

 > df2
Time                      Var3   Var4
01/01/2019 01:10:00        "C"    "H"
02/01/2019 01:10:00        "B"    "I"
02/01/2019 10:10:00        "G"    "J"
04/01/2019 01:10:00        "A"    "K"

Объединить их в соответствии со временем. И идеальный объединенный фрейм данных должен быть таким, как показано ниже:

 Time                      Var3   Var4    var1    var2
01/01/2019 01:10:00        "C"    "H"     "A"      "D"
02/01/2019 01:10:00        "B"    "I"     "B"      "E"
02/01/2019 10:10:00        "G"    "J"     "B"      "E"    
04/01/2019 01:10:00        "A"    "K"     "C"      "F"

Как это реализовать? Спасибо!

1 Ответ

1 голос
/ 02 августа 2020

Вариант использования скользящего соединения в data.table:

df1[df2, on=.(Time), roll="nearest", allow.cartesian=TRUE]

вывод:

                  Time Var1 Var2 Var3 Var4
1: 2019-01-01 01:10:00    A    D    C    H
2: 2019-02-01 01:10:00    B    E    B    I
3: 2019-02-01 10:10:00    B    E    G    J
4: 2019-04-01 01:10:00    C    F    A    K

данные:

library(data.table)
df1 <- fread('Time,Var1,Var2
01/01/2019 01:10:00,A,D
02/01/2019 01:10:00,B,E
03/01/2019 01:10:00,C,F')
df1[, Time := as.POSIXct(Time, format="%m/%d/%Y %T")]

df2 <- fread('Time,Var3,Var4
01/01/2019 01:10:00,C,H
02/01/2019 01:10:00,B,I
02/01/2019 10:10:00,G,J
04/01/2019 01:10:00,A,K')
df2[, Time := as.POSIXct(Time, format="%m/%d/%Y %T")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...