r - 根据最接近的时间戳将两个数据帧与 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
我们如何根据最接近的时间戳合并它们?
解决方案
进入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
推荐阅读
- swift - 如何在 Swift 中初始化和使用函数指针
- html - 如何从PHP对齐同一行上的两个元素
- c++ - 无法强制发生静态成员变量的链接错误
- javascript - 根据数组更改对象键
- react-native - React Native:如何获得“正常”的 SelectBox/Picker
- excel - 使用 vba 创建可写组合框
- json.net - 将arrayList反序列化为无效的JSON
- javascript - 将数据加载到 Bootstrap Accordion 的最佳方式
- c - 带 SIOCSIFFLAGS 的 setsockopt 和 ioctl 有什么区别?
- python - 即使调用 draw 也不会显示 FigureCanvas