2016-07-14 3 views
0

у меня есть набор данных datA, который выглядит какДата слияния между диапазоном и отдельными датами

ID  LINE_ID  Fromdate  Todate  UniqueID 
1  1   1/1/2015  2/3/2015 11 
1  2   3/7/2015  3/9/2015 12 
2  1   2/2/2015  2/8/2015 21 
3  1   1/3/2013  1/8/2013 31 

И в datB, который выглядит как

ID LINE_ID  Date  UniqueID 
1  1   1/1/2015 11 
1  2   1/3/2015 12 
1  3   2/2/2015 13 
1  4   2/8/2015 14 
1  5   3/8/2015 15 
2  1   2/2/2015 21 
2  2   2/3/2015 22 
2  3   2/7/2015 23 
2  4   2/8/2015 24 
3  1   1/3/2013 31 
3  2   1/7/2013 32 
3  3   1/8/2013 33 
3  4   1/9/2013 34 

То, что я хочу сделать, это найти способ либо объединить оба набора данных или найдите способ отметить, что UniqueID в datA принадлежит к какой строке в datB. Например, используя два набора данных выше, я хотел бы, чтобы datC выглядел как datB с добавленной колонкой, для которой соответствует UniqueID в datA.

ID LINE_ID  Date  UniqueID  UniqueID.A 
1  1   1/1/2015 11   11 
1  2   1/3/2015 12   11 
1  3   2/2/2015 13   11 
1  4   2/8/2015 14   NA 
1  5   3/8/2015 15   12 
2  1   2/2/2015 21   21 
2  2   2/3/2015 22   21 
2  3   2/7/2015 23   21 
2  4   2/8/2015 24   21 
3  1   1/3/2013 31   31 
3  2   1/7/2013 32   31 
3  3   1/8/2013 33   31 
3  4   1/9/2013 34   NA 

Как можно видеть, новый столбец добавляется в datB есть что UniqueID в datA делает диапазон дат в datB падения внутри.

Есть ли у кого-нибудь указания относительно того, как это сделать в R?

+0

Много примеров на SO, как это. http://stackoverflow.com/questions/34491184/r-counting-dates-within-time-intervals и http://stackoverflow.com/questions/24807775/summing-up-values-within-inter-interval-from- другой-data-frame-in-r –

+0

@PierreLafortune Wow выглядит так, что я искал неправильную вещь. Для большого набора данных вы бы рекомендовали подход 'dplyr' или подход' data.table'? – akash87

+0

'данные.table'. Но не забудьте заранее отформатировать все правильно. Столбцы даты - это действительно даты, а не строки или факторы и т. Д. ... –

ответ

1

Чтобы помочь в реализации. Убедитесь, что в столбцах указаны правильные типы и клавиши:

#Create a start and end columns formatted to dates 
setDT(datB)[, ':='(c("start", "end"), as.IDate(Date, format="%m/%d/%Y"))] 

#Format columns to dates 
setDT(datA)[, ':='(c("Fromdate", "Todate"), 
        lapply(.SD, as.IDate, format="%m/%d/%Y")), 
      .SDcols=c("Fromdate", "Todate")] 

#Set keys for matching intervals on 
setkey(datA, Fromdate, Todate) 
setkey(datB, start, end) 

#Match on intervals 
foverlaps(datB, datA, type="within") 
Смежные вопросы