根据最大相隔x分钟的时间戳在R中连接两个数据帧
我试图将R中的两个数据帧连接到一个日期列(不同时间戳的度量)。日期时间戳在两个帧上不相等,因此我需要以某种方式舍入时间戳,以便能够联接。 我想到:根据最大相隔x分钟的时间戳在R中连接两个数据帧,r,dataframe,R,Dataframe,我试图将R中的两个数据帧连接到一个日期列(不同时间戳的度量)。日期时间戳在两个帧上不相等,因此我需要以某种方式舍入时间戳,以便能够联接。 我想到: 首先将值四舍五入到最接近的分钟,然后合并 这种方法的问题是,舍入可能会导致相近的测量值舍入到不同的分钟数,因此它们无法合并 基于与第二帧最近的值连接记录(使用“data.table”中的“roll”) 这种方法的问题是,在每个帧上都可能缺少测量值,因此上面的第二个解决方案不起作用(缺少的测量值之后最近的下一个测量值是错误的)。我的问题是,在以下条件下
Name Date Value Unit
Temperature 01/04/2017 00:02:08 14.6 degC
Temperature 01/04/2017 00:20:18 15.5 degC
Temperature 01/04/2017 00:38:29 14 degC
Temperature 01/04/2017 00:54:45 14.5 degC
Temperature 01/04/2017 01:14:44 13.9 degC`
湿度表
Name Date Value Unit
Relative Humidity 01/04/2017 00:02:25 56 %
Relative Humidity 01/04/2017 00:20:34 50 %
Relative Humidity 01/04/2017 00:38:44 59 %
Relative Humidity 01/04/2017 01:15:01 58 %`
结果表
Name.x Date Value.x Unit.x name.y value.y unit.y
Temperature 01/04/2017 00:02 14.6 degC Relative Humidity 56 %
Temperature 01/04/2017 00:20 15.5 degC Relative Humidity 50 %
Temperature 01/04/2017 00:38 14 degC Relative Humidity 59 %
Temperature 01/04/2017 00:54 14.5 degC NA NA NA
Temperature 01/04/2017 01:14 13.9 degC Relative Humidity 58 %`
data.table
包中的滚动联接可以为您完成这项工作roll=120
将其设置为120秒的最大差值nomatch=NA
获取不匹配的缺失值
library("data.table")
library("anytime") # just to quickly get your strings as times
d1 = data.table(date = anytime(c("01/04/2017 00:02:08","01/04/2017 00:20:18","01/04/2017 00:38:29","01/04/2017 00:54:45","01/04/2017 01:14:44")),
value = c(14.6, 15.5, 14 , 14.5, 13.9))
d2 = data.table(date = anytime(c("01/04/2017 00:02:25", "01/04/2017 00:20:34", "01/04/2017 00:38:44", "01/04/2017 01:14:40")),
value = c(56, 50, 59, 58))
d2[, timestamp_d2 := timestamp]
d = d2[d1, on = 'date', roll = 'nearest', nomatch = NA]
d[abs(timestamp - timestamp_d2) <= 120]
库(“data.table”)
库(“随时”)#只需快速获取字符串即可
d1=数据表(日期=任何时间(c(“2017年4月1日00:02:08”,“2017年4月1日00:20:18”,“2017年4月1日00:38:29”,“2017年4月1日00:54:45”,“2017年4月1日01:14:44”),
数值=c(14.6,15.5,14,14.5,13.9))
d2=数据表(日期=任何时间(c(“2017年4月1日00:02:25”、“2017年4月1日00:20:34”、“2017年4月1日00:38:44”、“2017年4月1日01:14:40”),
值=c(56,50,59,58))
d2[时间戳_d2:=时间戳]
d=d2[d1,日期='date',滚动='nearest',nomatch=NA]
d[abs(timestamp-timestamp_d2)您的日期
列的类是什么?当前如何对值进行舍入?日期列是POSIXct类型
,当前使用的舍入函数是-舍入日期{lubridate}
仅当假设d2测量总是在d1测量后几秒钟进行时,此操作才有效。我不能假设.d2测量可以在d1测量前几秒钟或之后几秒钟进行。这可以通过设置“roll=”nearest'与最近的观测相结合,然后再对绝对d两个时间戳之间的差异小于120。我将编辑答案,因为它需要几个步骤。在当前解决方案中,结果表中不会有NA值,并且会丢失一些观察值