Объединение кадров данных в R

Скажем, у меня есть два фрейма данных. У каждого есть столбцы ДЕНЬ, МЕСЯЦ и ГОД, а также еще одна переменная, C и P, соответственно. Я хочу объединить два фрейма данных двумя разными способами. Сначала сливаю по данным:

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

person Jota    schedule 26.01.2012    source источник
comment
Трудно сказать без более подробной информации о датах, с которыми вы имеете дело. потенциально вы можете преобразовать их в даты, а затем в числовые и округлить их так, чтобы дни были одинаковыми ... или, если у вас есть только одна дата в месяц, объедините только месяц и год ... вы можете предоставить небольшой образец данные, чтобы мы могли видеть, с чем вы работаете? Кроме того, кстати, вам не нужно указывать by.x и by.y. merge найдет совпадающие столбцы и все равно объединит их.   -  person Justin    schedule 26.01.2012


Ответы (1)


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

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

person frankc    schedule 26.01.2012