2016-12-14 11 views
0

데이터 프레임에 저장된 대학 과정 강의 목록이 있습니다. 이것은 1000 개가 넘는 큰 테이블입니다. 예제에서 간단한 시간을 사용했지만 실제로는 % d % b % Y % H : % M 형식의 날짜 시간입니다. 나는 더 복잡한 사용법을 외삽 할 수 있어야한다고 생각합니다. 본질적날짜 시간 요소의 쌍으로 된 겹침 목록보기 R

:

ModuleCode1 ModuleName Lecturer StartTime EndTime Course 
    11A  Hist1  Bob  10:30  12:30 Hist 
    13A  Hist2  Bob  14:30  15:30 Hist 
    13C  Hist3  Steve 11:45  12:45 Hist 
    15B  Hist4  Bob  09:40  10:40 Hist 
    17B  Hist5  Bob  14:00  15:00 Hist 

I는 시간표와 충돌하는 시간 모듈을 결정하는 출력 데이터 프레임을 생성하는 것을 시도하고있다. 예를 들어 :

ModuleCode1 StartTime EndTime ModuleCode2 StartTime EndTime 
    11A   10:30  12:30  15B   09:40 10:40 
    11A   10:30  12:30  13C   11:45 12:45 
    13A   10:30  12:30  17B   14:00 15:00 

는 날짜 시간에 대한 질문의 군중이 겹침,하지만 난 찾을 수있는 사람은 2 dataframes와에 중 하나 일 것, 또는 내가 그들을 이해할 수 없습니다. 내가 lubridate와 IRanges 패키지를 보았지만이 특정 구현을 단일 데이터 프레임에서 날짜 시간으로 처리 할 수는 없습니다. 일반적으로 유용 할 것으로 보이고, 간단한 구현을 할 가능성이 높습니다. 어떤 도움에 감사드립니다.

+0

dataframe 2 dataframes between1 차이가 없다. 'data.table' 라이브러리에서'sqldf' 또는'foverlaps()'를 사용하여 데이터 프레임을 자신과 병합 할 수 있습니다. – Xinlu

답변

1

여기에 sqldf 솔루션이 있습니다. 그들이 중복 않도록이 문장의 부정 사실 정확히 때 간격 따라서, IFF a.StartTime> b.EndTime 또는 a.EndTime < b.StartTime 겹치지 않는 :

library(sqldf) 
sqldf("select a.ModuleCode1, a.StartTime, a.EndTime, b.ModuleCode1, b.StartTime, b.EndTime 
     from DF a join DF b on a.ModuleCode1 < b.ModuleCode1 and 
           a.StartTime <= b.EndTime and 
           a.EndTime >= b.StartTime") 

주는 :

ModuleCode1 StartTime EndTime ModuleCode1 StartTime EndTime 
1   11A  10:30 12:30   13C  11:45 12:45 
2   11A  10:30 12:30   15B  09:40 10:40 
3   13A  14:30 15:30   17B  14:00 15:00 

참고 : 재생 가능한 형태로 입력된다 :

Lines <- "ModuleCode1 ModuleName Lecturer StartTime EndTime Course 
    11A  Hist1  Bob  10:30  12:30 Hist 
    13A  Hist2  Bob  14:30  15:30 Hist 
    13C  Hist3  Steve 11:45  12:45 Hist 
    15B  Hist4  Bob  09:40  10:40 Hist 
    17B  Hist5  Bob  14:00  15:00 Hist" 

DF <- read.table(text = Lines, header = TRUE) 
+0

절대적으로 뛰어납니다! 나는이 훌륭한 패키지가 SQL을 사용하기 위해 존재했는지 전혀 몰랐습니다. 고마워,이게 내가 모든 문제를 해결하는 데 도움이 될거야. – crazylearner