R merge, dplyr 또는 data.table을 사용하여 R에서 데이터를 병합하는 방법

R에는 공통 열로 데이터 프레임을 결합하는 빠르고 우아한 방법이 많이 있습니다. 그중 세 가지를 보여 드리고자합니다.

  • 기본 R의 merge()함수,
  • dplyr의 조인 기능 군
  • data.table의 대괄호 구문.

데이터 가져 오기 및 가져 오기

이 예에서는 내가 가장 좋아하는 데모 데이터 세트 중 하나 인 미국 교통 통계국의 비행 지연 시간을 사용하겠습니다. 따라하려면 //bit.ly/USFlightDelays로 이동하여 Flight Date , Reporting_Airline , Origin , DestinationDepartureDelayMinutes 열을 사용하여 선택한 시간 프레임에 대한 데이터를 다운로드합니다 . Reporting_Airline에 대한 조회 테이블도 가져옵니다 .

또는 다음 두 데이터 세트와 함께 단일 파일의 R 코드와 다양한 유형의 데이터 병합을 설명하는 PowerPoint를 여기에서 다운로드하십시오.

R에서 데이터를 병합하는 방법에 대한 코드, 데이터 및 PowerPoint를 다운로드하십시오. 기사와 함께 제공되는 여러 데이터 파일, PowerPoint 및 R 스크립트가 포함되어 있습니다. 샤론 마클리스

base R로 파일을 읽으려면 먼저 비행 지연 파일의 압축을 푼 다음 비행 지연 데이터와 read.csv(). 코드를 실행중인 경우 다운로드 한 지연 파일의 이름이 아래 코드와 다를 수 있습니다. 또한 조회 파일의 비정상적인 .csv_확장자에 유의하십시오 .

압축 해제 ( "673598238_T_ONTIME_REPORTING.zip")

mydf <-read.csv ( "673598238_T_ONTIME_REPORTING.csv",

sep = ",", quote = "\" ")

mylookup <-read.csv ( "L_UNIQUE_CARRIERS.csv_",

quote = "\" ", sep =", ")

다음으로 두 파일을 모두 살펴 보겠습니다 head().

head (mydf) FL_DATE OP_UNIQUE_CARRIER ORIGIN DEST DEP_DELAY_NEW X 1 2019-08-01 DL ATL DFW 31 NA 2 2019-08-01 DL DFW ATL 0 NA 3 2019-08-01 DL IAH ATL 40 NA 4 2019-08-01 DL PDX SLC 0 NA 5 2019-08-01 DL SLC PDX 0 NA 6 2019-08-01 DL DTW ATL 10 NA

head (mylookup) 코드 설명 1 02Q Titan Airways 2 04Q Tradewind Aviation 3 05Q Comlux Aviation, AG 4 06Q Master Top Linhas Aereas Ltd. 5 07Q Flair Airlines Ltd. 6 09Q Swift Air, LLC d / b / a Eastern Air Lines d / b / a 동부

기본 R과 병합

mydf 지연 데이터 프레임에는 코드 별 항공사 정보 만 있습니다. 의 항공사 이름이있는 열을 추가하고 싶습니다 mylookup. 이를 수행하는 한 가지 기본 R 방법 merge()은 기본 구문을 사용하는 함수를 사용하는 것 merge(df1, df2)입니다. 데이터 프레임 1과 데이터 프레임 2의 순서는 중요하지 않지만 첫 번째는 x로 간주되고 두 번째는 y로 간주됩니다. 

당신이로 가입 할 열이 같은 이름이없는 경우, 당신은 당신이에 의해 가입하려는 열 병합 말할 필요 by.x는 x 데이터 프레임 열 이름을, 그리고 by.y같은 y를 하나에 merge(df1, df2, by.x = "df1ColName", by.y = "df2ColName").

모든 행을할지 여부 또한 인수와 일치하지 사람, 아니면 그냥 행 일치하는, 포함, 병합을 알 수 all.xall.y. 이 경우 지연 데이터의 모든 행을 원합니다. 조회 테이블에 항공사 코드가없는 경우에도 정보를 원합니다. 그러나 지연 데이터에없는 조회 테이블의 행은 필요하지 않습니다 (더 이상 비행하지 않는 오래된 항공사에 대한 일부 코드가 있음). 따라서 all.x동일 TRUE하지만 all.y같습니다 FALSE. 전체 코드 :

join_df <-merge (mydf, mylookup, by.x = "OP_UNIQUE_CARRIER",

by.y = "코드", all.x = TRUE, all.y = FALSE)

새로 결합 된 데이터 프레임에는 항공사 코드를 기반으로 한 항공사 이름이 포함 된 Description이라는 열이 포함됩니다.

head (joined_df) OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEW X 설명 1 9E 2019-08-12 JFK SYR 0 NA Endeavour Air Inc. 2 9E 2019-08-12 TYS DTW 0 NA Endeavour Air Inc. 3 9E 2019-08-12 ORF LGA 0 NA Endeavour Air Inc. 4 9E 2019-08-13 IAH MSP 6 NA Endeavour Air Inc. 5 9E 2019-08-12 DTW JFK 58 NA Endeavour Air Inc. 6 9E 2019-08-12 SYR JFK 0 NA 엔데버 에어 Inc. .

dplyr과 조인

dplyr은 조인 함수에 SQL 데이터베이스 구문을 사용합니다. 왼쪽 가입  수단을 : (에있는 X 데이터 프레임 무엇 왼쪽에있는 모든 포함 merge()) 및 모든 행을 그 오른쪽 (Y) 데이터 프레임에서 일치합니다. 조인 열의 이름이 같은 경우 필요한 것은 left_join(x, y). 그들은 같은 이름이없는 경우, 당신은 필요 by같은 인수를 left_join(x, y, by = c("df1ColName" = "df2ColName")).

의 구문에 유의하십시오 by. 왼쪽 및 오른쪽 열 이름이 모두 인용 부호로 묶인 명명 된 벡터입니다.

사용하여 두 데이터 세트를 가져오고 병합하는 코드 left_join()는 다음과 같습니다. dplyr 및 readr 패키지를로드하여 시작한 다음 read_csv(). 를 사용할 때 read_csv()먼저 파일의 압축을 풀 필요가 없습니다.

도서관 (dplyr)

도서관 (독자)

mytibble <-read_csv ( "673598238_T_ONTIME_REPORTING.zip")

mylookup_tibble <-read_csv ( "L_UNIQUE_CARRIERS.csv_")

join_tibble <-left_join (mytibble, mylookup_tibble,

기준 = c ( "OP_UNIQUE_CARRIER"= "코드"))

read_csv()몇 가지 추가 기능이있는 데이터 프레임 유형 인 tibbles를 생성 합니다. left_join()둘을 병합합니다. 구문을 살펴보십시오.이 경우 순서가 중요합니다. 왼쪽 또는 첫 번째 데이터 세트의 모든 행을 포함하지만 두 번째 데이터 세트와 일치하는 행만 포함left_join() 함을 의미 합니다 . 그리고 이름이 다른 두 개의 열로 조인해야하므로 by인수를 포함했습니다 .

dplyr의 glimpse()함수로 결과의 구조 를 볼 수 있습니다. 이는 데이터 프레임의 상위 몇 개 항목을 보는 또 다른 방법입니다.

glimpse (joined_tibble) 관찰 : 658,461 변수 : 7 $ FL_DATE 2019-08-01, 2019-08-01, 2019-08-01, 2019-08-01, 2019-08-01… $ OP_UNIQUE_CARRIER "DL", "DL ","DL ","DL ","DL ","DL ","DL ","DL ","DL ","DL ",… $ ORIGIN"ATL ","DFW ","IAH "," PDX ","SLC ","DTW ","ATL ","MSP ","JF… $ DEST "DFW", "ATL", "ATL", "SLC", "PDX", "ATL", "DTW ","JFK ","MS… $ DEP_DELAY_NEW 31, 0, 40, 0, 0, 10, 0, 22, 0, 0, 0, 17, 5, 2, 0, 0, 8, 0,… $ X6 NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,… $ 설명 "Delta Air Lines Inc.", "Delta Air Lines Inc.", "델타 에어…

이 결합 된 데이터 세트에는 이제 항공사 이름이있는 새 열이 있습니다. 이 코드의 버전을 직접 실행하면 dplyr이 기본 R보다 훨씬 빠르다는 것을 알 수 있습니다.

다음으로 조인을 수행하는 초고속 방법을 살펴 보겠습니다.