Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据最大相隔x分钟的时间戳在R中连接两个数据帧_R_Dataframe - Fatal编程技术网

根据最大相隔x分钟的时间戳在R中连接两个数据帧

根据最大相隔x分钟的时间戳在R中连接两个数据帧,r,dataframe,R,Dataframe,我试图将R中的两个数据帧连接到一个日期列(不同时间戳的度量)。日期时间戳在两个帧上不相等,因此我需要以某种方式舍入时间戳,以便能够联接。 我想到: 首先将值四舍五入到最接近的分钟,然后合并 这种方法的问题是,舍入可能会导致相近的测量值舍入到不同的分钟数,因此它们无法合并 基于与第二帧最近的值连接记录(使用“data.table”中的“roll”) 这种方法的问题是,在每个帧上都可能缺少测量值,因此上面的第二个解决方案不起作用(缺少的测量值之后最近的下一个测量值是错误的)。我的问题是,在以下条件下

我试图将R中的两个数据帧连接到一个日期列(不同时间戳的度量)。日期时间戳在两个帧上不相等,因此我需要以某种方式舍入时间戳,以便能够联接。 我想到:

  • 首先将值四舍五入到最接近的分钟,然后合并 这种方法的问题是,舍入可能会导致相近的测量值舍入到不同的分钟数,因此它们无法合并

  • 基于与第二帧最近的值连接记录(使用“data.table”中的“roll”) 这种方法的问题是,在每个帧上都可能缺少测量值,因此上面的第二个解决方案不起作用(缺少的测量值之后最近的下一个测量值是错误的)。我的问题是,在以下条件下,如何从两个帧连接两条记录: 如果时间戳之间的差异小于2分钟-将它们加入到1条记录中 ELSE(一般情况下)-保留所有与连接帧列中的N/a值不匹配的记录

  • **由于缺少测量值,两个框架的长度可能不同

    温度表

    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值,并且会丢失一些观察值