2012-06-15 3 views
2

가능한 중복 가입을 위해 존재하는 경우 내부 가입 : R.중복이 변수

에 조인 그리고 내부에 Wikipedia article 유용 가입을 통해
How to join data frames in R (inner, outer, left, right)?

This question는 잘 간다.

나는 다음과 같은 일을 생각하지 않는다 기본 R.에서이 결과를 재현하려는 :

merge(employee,department,all=T) 
merge(employee,department) 

를 때문에 병합 변수에 중복으로.

그러나, sqldf 작품 :

library(sqldf) 
sqldf("select * from employee inner join department ON employee.DepartmentID = department.DepartmentID") 

내 질문은 :

  1. 은 내부가 여기에 가입 수행하지 않습니다 병합이 평균을한다.

  2. 어떻게이 여기에 위의 웹 사이트 및 예제와 함께 작동하는 두 개의 data.frames은 기본 R.

에 참여 수행 할 수 있습니다. 이 당신을 위해 작동하는 경우

employee <- structure(list(LastName = c("Rafferty ", "Jones", "Steinberg", 
"Robinson", "Smith", "John"), DepartmentID = c("31", "33", "33", 
"34", " 34", " .")), .Names = c("LastName", "DepartmentID"), class = "data.frame", row.names = c(NA, -6L)) 

department <- structure(list(DepartmentID = c(31L, 33L, 34L, 35L), DepartmentName = structure(c(4L,2L, 1L, 3L), .Label = c("Clerical", "Engineering", "Marketing", "Sales"), class = "factor")), .Names = c("DepartmentID", "DepartmentName"), class = "data.frame", row.names = c(NA, -4L)) 
+0

'병합'을 사용하면 링크 된 질문에서 내부 결합을 수행하는 방법과 일치하지 않습니다. – joran

+0

sqldf 출력이 링크의 예제와 일치합니다. 병합으로이 작업을 수행 할 수있는 방법이 있습니까? 병합이 내부 조인이라는 것을 두 곳에서 읽었으므로 정의를 더 잘 이해하려고 노력하고 있습니다. 감사. – julieth

+0

내가 말했듯이, 당신의 코드 인'merge (employee, department, all = T)'와 위에서 링크 된 질문에서 내부 조인을하기위한 지시 사항을 비교하십시오. 그곳에서 받아 들여지는 대답이 당신에게 지시 할 때 당신은 그것을하지 않습니다. – joran

답변

3

Julieth,

을 참조하십시오. 데이터 구조의 구조를 검사하여 결과가 의도 한 바가 아닌 이유를 확인했습니다.

str(department) 
str(employee) 
employee$DepartmentID <- as.numeric(employee$DepartmentID) 
merge(employee,department) 
+0

'all.x = T'는 내부 조인을 지정하지 않습니다. OP 자신이 링크하는 질문에 명확하게 설명되어 있듯이, 이것은 왼쪽 외부 조인을 생성합니다. (하지만 당신 말이 맞습니다. 다른 문제는 ID 열 중 하나가 문자였습니다.) – joran

+0

고마워요. 내가 그걸 망쳐 놓은 것 같아. 조란 (Joran)이 지적했듯이, 내가 사용한 구조는 일치하지 않았습니다. 첫 번째 질문에 대해서는 좋지 않습니다. :) – julieth

관련 문제