2013-05-05 2 views
3

두 데이터 프레임 DFS와 DFE가 있습니다. DFS에는 직원이 일련의 작업을 시작한 시작 날짜가 있습니다. DFE에는 작업을 마친 종료일이 있습니다. 직원 ID가 두 프레임에 나타나는 순서는 다를 수 있습니다.일치하는 키로 R의 두 데이터 프레임을 병합

DFR <-data.frame(ID=c('ID1','ID2','ID3'), begin=c('3/1/06 18:20', '2/1/07 15:30', '5/3/06 9:00'), 
       end=c('1/1/09 11:10', '6/1/11 14:20','4/1/10 12:00') ); 

이것은 루프에서 수행 할 수 있습니다

DFS <- data.frame(ID=c('ID1','ID2','ID3'), begin=c('3/1/06 18:20', '2/1/07 15:30', '5/3/06 9:00')); 
DFE <- data.frame(ID=c('ID3', 'ID2','ID1'), end=c('4/1/10 12:00', '6/1/11 14:20', '1/1/09 11:10')); 

나는이 (가) 각 직원 (아래 예를 들어, 출력)에 대한 최종 종료 날짜를 시작 일치하는 데이터 프레임을 만들려고합니다. 그러나 루프가 포함되지 않은 R에서 일치 및 병합을위한 대체 방법이 있는지 알고 싶습니다. 당신의 도움을 주셔서 감사합니다.

답변

7

merge 원하는 것을 수행합니다. 그것은 조인 된 데이터의 데이터 프레임을 생성합니다. 여기에서 by으로 지정된 ID 열에 참여하려고합니다.

by은 데이터 프레임 사이의 열 이름의 교집합을 기본값으로 사용하므로 다른 공통 열이없는 경우이를 지정할 필요가 없습니다.

merge(DFS, DFE, by='ID') 
## ID  begin   end 
## 1 ID1 3/1/06 18:20 1/1/09 11:10 
## 2 ID2 2/1/07 15:30 6/1/11 14:20 
## 3 ID3 5/3/06 9:00 4/1/10 12:00 
+0

답변 해 주셔서 감사합니다. 죄송합니다. 두 데이터 프레임에는 직원에 대한 공통적 인 다른 열이 있습니다. 예를 들어, DFS와 DFE는 모두 직원의 주소와 나이를 포함합니다. 이 경우에도 merge()가 작동합니까? 감사. – user2327621

+0

그럴 것이다. 일치하는 이름과 같은 이름의 다른 열이있는 경우,'by' 인수를 지정할 필요가 있습니다. –

+0

''merge''를 사용할 때마다 예상되는''value'' 대신''value.x''와''value.y''로 끝나고 또 다른 해결책을 찾게 될 것입니다 ... – PatrickT

관련 문제