2016-12-02 82 views
0

我有兩個不同長度的數據幀(n = 3012和3008),我需要根據日期進行合併。我嘗試過使用merge和rbindfill函數,但沒有成功。兩個數據幀之間的通用線程是date_time,但是兩個df2都不具有與df1相同的值。按匹配日期合併不同長度的數據幀

DF1

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 

DF2

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 

我嘗試使用合併(見下文),但沒有奏效,因爲列長度不同。

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

我也嘗試使用rbind.fill(下面),但它取代了df2的所有值。

DF_New <- rbind.fill(df1,df2) 

有什麼建議嗎?

+0

你對失敗原因的假設是不正確的。合併行數不等的數據幀是典型的。如果你需要強制Date-class,那麼使用'as.Date'。 –

回答

2

使用dplyr包並嘗試left_join()。這將返回df1中的所有行以及df1df2中的所有列。 df1中的任何一行不匹配將收到NA

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

退房的其他類型的連接,你可以有?join

0

你擁有它幾乎是正確的,所有你需要做的,就是多了一個參數添加到您的函數:

DF_New < - 合併(DF1,DF2,by.x = DF1 $ DATE_TIME,by.y = df2 $ date_time,all = TRUE)

+0

我仍然收到以下錯誤消息。 錯誤fix.by(by.x,x):'by'必須匹配列數 – Koda

+0

然後嘗試:按「date_time – Wister

+0

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