R의 데이터 프레임 병합: 전체 및 부분 일치
우리는 여러 소스로부터 데이터를 얻는 경우가 많습니다. 분석을 수행하려면 다음이 필요합니다. 병합 두 개의 데이터프레임과 하나 이상의 데이터프레임 공통 주요 변수.
이 자습서에서는 다음을 배우게 됩니다.
전체 경기
전체 일치는 대상 테이블에 대응되는 값이 반환됩니다. 일치하지 않는 값은 새 데이터 프레임에 반환되지 않습니다. 그러나 부분 일치에서는 누락된 값이 NA로 반환됩니다.
우리는 간단한 것을 볼 것입니다 내부 결합. 내부 조인 키워드는 두 테이블 모두에서 일치하는 값이 있는 레코드를 선택합니다. 두 개의 데이터 세트를 결합하려면 merge() 함수를 사용할 수 있습니다. 우리는 세 가지 인수를 사용합니다:
merge(x, y, by.x = x, by.y = y) Arguments: -x: The origin data frame -y: The data frame to merge -by.x: The column used for merging in x data frame. Column x to merge on -by.y: The column used for merging in y data frame. Column y to merge on
예:
변수를 사용하여 첫 번째 데이터세트 만들기
- 성
- 국적
변수를 사용하여 두 번째 데이터세트 만들기
- 성
- 영화 산업
공통 키 변수는 성입니다. 두 데이터를 병합하고 차원이 7×3인지 확인할 수 있습니다.
우리는 원하지 않기 때문에 데이터 프레임에 stringsAsFactors=FALSE를 추가합니다. R 문자열을 요소로 변환하려면 변수를 문자로 처리해야 합니다.
# Create origin dataframe( producers <- data.frame( surname = c("Spielberg","Scorsese","Hitchcock","Tarantino","Polanski"), nationality = c("US","US","UK","US","Poland"), stringsAsFactors=FALSE) # Create destination dataframe movies <- data.frame( surname = c("Spielberg", "Scorsese", "Hitchcock", "Hitchcock", "Spielberg", "Tarantino", "Polanski"), title = c("Super 8", "Taxi Driver", "Psycho", "North by Northwest", "Catch Me If You Can", "Reservoir Dogs","Chinatown"), stringsAsFactors=FALSE) # Merge two datasets m1 <- merge(producers, movies, by.x = "surname") m1 dim(m1)
출력:
surname nationality title 1 Hitchcock UK Psycho 2 Hitchcock UK North by Northwest 3 Polanski Poland Chinatown 4 Scorsese US Taxi Driver 5 Spielberg US Super 8 6 Spielberg US Catch Me If You Can 7 Tarantino US Reservoir Dogs
공통 키 변수의 이름이 다른 경우 데이터 프레임을 병합해 보겠습니다.
영화 데이터 프레임에서 성을 이름으로 변경합니다. 두 데이터프레임이 동일한지 확인하기 위해 동일(x1, x2) 함수를 사용합니다.
# Change name of ` movies ` dataframe colnames(movies)[colnames(movies) == 'surname'] <- 'name' # Merge with different key value m2 <- merge(producers, movies, by.x = "surname", by.y = "name") # Print head of the data head(m2)
출력:
##surname nationality title ## 1 Hitchcock UK Psycho ## 2 Hitchcock UK North by Northwest ## 3 Polanski Poland Chinatown ## 4 Scorsese US Taxi Driver ## 5 Spielberg US Super 8 ## 6 Spielberg US Catch Me If You Can
# Check if data are identical identical(m1, m2)
출력:
## [1] TRUE
이는 열 이름이 다르더라도 병합 작업이 수행됨을 보여줍니다.
부분 일치
두 데이터프레임에 동일한 공통 키 변수가 없다는 것은 놀라운 일이 아닙니다. 에서 완전 매칭, 데이터 프레임이 반환됩니다. 만 x 및 y 데이터 프레임 모두에서 행이 발견되었습니다. 와 함께 부분 병합, 다른 데이터 프레임에서 일치하는 행이 없는 행을 유지하는 것이 가능합니다. 이러한 행에는 일반적으로 y의 값으로 채워지는 열에 NA가 있습니다. all.x= TRUE로 설정하면 됩니다.
예를 들어, 영화 데이터 프레임의 영화 참조 없이 제작자 데이터 프레임에 새로운 제작자 Lucas를 추가할 수 있습니다. all.x= FALSE로 설정하면 R은 두 데이터 세트에서 일치하는 값만 결합합니다. 우리의 경우 생산자 Lucas는 하나의 데이터 세트에서 누락되었기 때문에 병합에 참여하지 않습니다.
all.x= TRUE를 지정할 때와 지정하지 않을 때 각 출력의 차원을 살펴보겠습니다.
# Create a new producer add_producer <- c('Lucas', 'US') # Append it to the ` producer` dataframe producers <- rbind(producers, add_producer) # Use a partial merge m3 <-merge(producers, movies, by.x = "surname", by.y = "name", all.x = TRUE) m3
출력:
# Compare the dimension of each data frame dim(m1)
출력:
## [1] 7 3
dim(m2)
출력:
## [1] 7 3
dim(m3)
출력:
## [1] 8 3
우리가 볼 수 있듯이, 새로운 데이터 프레임의 차원은 8×3이고 m7과 m3의 1×2과 비교됩니다. R은 책 데이터 프레임에 누락된 저자에 대한 NA를 포함합니다.