2015-07-30 2 views
-2

у меня есть два dataframes, который имеет следующий формат:Объединение фреймов данных с различным количеством строк

Date   COL1 COL2 COL3 COL4 
7/1/2015 Company1 0 0  0  
7/2/2015 Company1 1 0  0 
7/3/2015 Company1 0 0  8 
7/4/2015 Company1 0 3  0 
7/1/2015 Company2 0 0  0 
7/2/2015 Company2 5 9  10 
7/3/2015 Company2 0 0  0 
7/4/2015 Company2 1 0  0 
7/1/2015 Company3 0 0  0 

2-й dataframe выглядит следующим образом:

Date  COL1 COL2 COL3 COL4 
7/1/2014 Company1 1 6  4  
7/3/2014 Company1 4 9  5 
7/4/2014 Company1 5 2  6 
7/5/2014 Company1 4 2  8 
7/2/2014 Company2 8 9  32 
7/3/2014 Company2 9 12  8 
7/1/2014 Company3 4 5  6 

Я хочу, чтобы объединить их таким образом, чтобы она выглядит следующим образом:

Date  COL1 COL2 COL3 COL4  Date  COL1  COL2 COL3 COL4 
7/1/2014 Company1 1 6  4 7/1/2015 Company1  0  0  0 
7/2/2014 Company1 0 0  0 7/2/2015 Company1  1  0  0 
7/3/2014 Company1 4 9  5 7/3/2015 Company1  0  0  8 
7/4/2014 Company1 5 2  6 7/4/2015 Company1  0  3  0 
7/5/2014 Company1 4 2  8 7/5/2015 Company1  0  0  0 
7/1/2014 Company2 0 0  0 7/1/2015 Company2  0  0  0 
7/2/2014 Company2 8 9  32 7/2/2015 Company2  5  9  10 
7/3/2014 Company2 9 12  8 7/3/2015 Company2  0  0  0 
7/4/2014 Company2 0 0  0 7/4/2015 Company2  1  0  0 
7/1/2014 Company3 4 5  6 7/1/2015 Company3  0  0  0 

Так что в основном я хочу объединить по дате и компании. Цель состоит в том, чтобы выстроить даты, даже если отсутствуют данные из одного из блоков данных и заменить их на 0.

Если кто-то может помочь, будем рад!

+0

Ваши даты в один год между двумя dataframes. Это намеренно? –

+0

Да, если бы не год назад, я знаю, что это будет простое слияние, но мне трудно сделать это из-за разделения года. @ A.Webb – Nick

+0

Создайте столбцы «День месяца» и «День» из столбца «Дата», затем объедините по 3 столбцам «Компания», «Месяц», «День». – zx8754

ответ

2

Вы могли бы попробовать что-то вроде этого:

#parse dates 
df1$Date <- as.Date(df1$Date,format="%m/%d/%Y") 
df2$Date <- as.Date(df2$Date,format="%m/%d/%Y") 

#create day/month column 
df1$day_month <- format(df1$Date, "%m/%d") 
df2$day_month <- format(df2$Date, "%m/%d") 

#merge using day/month and company, all=T will print all rows 
merge(df1,df2,by=c("day_month","COL1"),all=T) 
+0

Спасибо за помощь! Единственное, что я хотел бы, это отсортировать его по дате, а затем по компании. Таким образом, у вас будут даты, указанные 7/1/14-7/8/14 для одной компании, а затем начинать сначала с 7/1/14-7/8/14 для следующей компании. @NicE – Nick

+0

Фактически @NicE Я смог экспортировать результат, который вы дали мне в Excel, а затем просто отсортировал его таким образом. Спас меня! – Nick

+2

Просто поменяйте порядок 'by'. –

Смежные вопросы