2012-01-26 7 views
1

Предположим, у меня есть два кадра данных. Каждая из них имеет столбцы DAY, MONTH и YEAR вместе с одной другой переменной C и P соответственно. Я хочу объединить два кадра данных двумя разными способами. Во-первых, я объединяюсь по данным:Объединение фреймов данных в R

test<-merge(data1,data2,by.x=c("DAY","MONTH","YEAR"),by.y=c("DAY","MONTH","YEAR"),all.x=T,all.y=F) 

Это работает отлично. Второе слияние - это то, с чем я столкнулся. Итак, в настоящее время я объединил значение для 5 января 1996 года из data1 и значение для 5 января 1996 года из data2 в один фрейм данных, но теперь я хотел бы объединить третье значение в каждую строку нового фрейма данных. В частности, я хочу объединить значение для 4 января 1996 года из data2 с двумя значениями с 5 января 1996 года. Какие-нибудь советы по слиянию должны быть такими гибкими?

выборка данных:

data1 
C DAY MONTH YEAR 
1 1  1 1996 
6 5  1 1996 
5 8  1 1996 
3 11  1 1996 
9 13  1 1996 
2 14  1 1996 
3 15  1 1996 
4 17  1 1996  

data2 
P DAY MONTH YEAR 
1 1  1 1996 
4 2  1 1996 
8 3  1 1996 
2 4  1 1996 
5 5  1 1996 
2 6  1 1996 
7 7  1 1996 
4 8  1 1996 
6 9  1 1996 
1 10  1 1996 
7 11  1 1996 
3 12  1 1996 
2 13  1 1996 
2 14  1 1996 
5 15  1 1996 
9 16  1 1996 
1 17  1 1996 
+1

его трудно сказать без дополнительной информации о датах, с которыми вы имеете дело. потенциально вы можете преобразовать их в даты, а затем в числовые и округлять их так близко друг к другу, то же самое ... или если у вас есть только одна дата в месяц, слияние только на месяц и год ... можете ли вы предоставить небольшой образец данных, чтобы мы могли видеть, с чем вы работаете? также, на боковой ноте, вам не нужно указывать 'by.x' и' by.y'. 'merge' найдет соответствующие столбцы и все равно сольется с ними. – Justin

ответ

1

Создайте новый столбец, который является типом Date, а не только несколько дней, месяц, год целые. Вы можете использовать as.Date() для этого, хотя вам нужно будет искать правильный формат аргумент format =, заданный вашей строкой. Назовем этот столбец D1. Теперь сделайте data1 $ D2 = data1 $ D1 + 1. Ключевым моментом здесь является то, что типы Date позволяют простую арифметику даты. Теперь просто сходим по x = D1 и y = D2.

В случае, если это вводит в заблуждение, нижняя строка заключается в том, что вам нужно скрывать ваши столбцы до типов Date, чтобы вы могли выполнять арифметику даты.

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