通过匹配日期合并不同长度的数据帧

时间:2016-12-02 20:37:13

标签: r merge time-series rbind

我有两个不同长度的数据帧(n = 3012和3008)我需要根据日期合并。我尝试过使用merge和rbindfill函数但没有成功。两个数据帧之间的共同线程是date_time,但是df2都没有与df1相同的所有值。

DF1

import cats.kernel.Order
import cats.kernel.instances.int._
import cats.kernel.Comparison._

val message =
  Order[Int].comparison(val1, val2) match {
    case GreaterThan => s"$stock1 has the highest current value"
    case LessThan    => s"$stock2 has the highest current value"
    case EqualTo => 
      s"The current value for $stock1 is equal the current value for $stock2"
  }

println(s"\n$message")

DF2

ID date_time Q_cfs Data_Code
68 2016-11-01 00:00:00   353         P
69 2016-11-01 00:15:00   356         P
70 2016-11-01 00:30:00   357         P
71 2016-11-01 00:45:00   356         P
72 2016-11-01 01:00:00   358         P
73 2016-11-01 01:15:00   355         P

我尝试使用merge(下面)但由于列长不同而无法使用。

ID  stage           date_time
1  4.82 2016-11-01 00:00:00
2  4.83 2016-11-01 00:15:00
3  4.84 2016-11-01 00:30:00
4  4.85 2016-11-01 00:45:00
5  4.86 2016-11-01 01:00:00
6  4.87 2016-11-01 01:15:00

我也尝试过使用rbind.fill(下面),但是用。替换了df2的所有值。

DF_New<- merge(df1,df2, by.x = df1$date_time, by.y = df2$date_time)

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

使用dplyr包并尝试left_join()。这将返回df1中的所有行以及df1df2中的所有列。 df1中没有匹配的任何行都会收到NA

library(dplyr)
left_join(df1, df2, by = "date_time")

查看?join可以与其他类型的联接。

答案 1 :(得分:0)

你几乎是正确的。您需要做的就是在函数中再添加一个参数,如下例所示:

DF_New<- merge(df1,df2, by.x = df1$date_time, by.y = df2$date_time, all=TRUE)