首页 > 解决方案 > 根据最接近的时间戳将两个数据帧与 R 中的几列连接起来

问题描述

这个问题已经在这里问过了。但是,问题中提出的情况和建议的解决方案仅在数据帧仅包含两个变量(其中之一是时间戳)时才有效。

我很惊讶,因为这个解决方案根本无法推广,它只处理一个非常具体的案例。

因此,如果我们有一个df1如下所示的数据框:

Timestamp       Var1 Var2 ... Var850
01-01-20 10:47  7    8        5
01-01-20 11:50  6    4        3

和一个df2看起来像这样的数据框:

Timestamp       Var851 Var852 ... Var2992
01-01-20 10:55  4    1            1
01-01-20 12:08  3    4            6

我们如何根据最接近的时间戳合并它们?

标签: r

解决方案


进入data.table滚动连接的世界

样本数据

#or use
#    setDT(df1); setDT(df2)
#to convert existing data.frame df1 and df2 to data.table


library( data.table)
df1 <- data.table::fread("Timestamp       Var1 Var2 
01-01-20T10:47  7    8        
01-01-20T11:50  6    4")        

df2 <- data.table::fread("Timestamp       Var851 Var852
01-01-20T10:55  4    1
01-01-20T12:08  3    4")

#timestamps/dates have to be of posix- or date-class to be able 
#to roll-join them
df1[, Timestamp := as.POSIXct( Timestamp, format = "%d-%m-%yT%H:%M")]
df2[, Timestamp := as.POSIXct( Timestamp, format = "%d-%m-%yT%H:%M")]

代码

df2[df1, roll = "nearest", on = .(Timestamp)]

#              Timestamp Var851 Var852 Var1 Var2
# 1: 2020-01-01 10:47:00      4      1    7    8
# 2: 2020-01-01 11:50:00      3      4    6    4

推荐阅读