2016-12-02 4 views
0

У меня есть два фрейма данных различной длины (n = 3012 и 3008), которые мне нужно объединить по дате. Я попытался использовать функции слияния и rbindfill, но не имел успеха. Общий поток между двумя файлами данных - дата_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 и всех столбцов от df1 и df2. Любые строки в 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