Dplyr 튜토리얼: 예제를 사용하여 R에서 데이터 병합 및 조인
데이터 분석 소개
데이터 분석은 세 부분으로 나눌 수 있습니다.
- 추출: 첫째, 다양한 소스로부터 데이터를 수집하고 결합해야 합니다.
- 변환: 이 단계에는 데이터 조작이 포함됩니다. 모든 데이터 소스를 통합한 후에는 데이터 정리를 시작할 수 있습니다.
- 눈에 보이게하다: 마지막 움직임은 데이터를 시각화하여 불규칙성을 확인하는 것입니다.

데이터 과학자가 직면한 가장 중요한 과제 중 하나는 데이터 조작입니다. 데이터는 원하는 형식으로 제공되지 않습니다. 데이터 과학자는 업무 시간의 절반 이상을 데이터를 정리하고 조작하는 데 소비해야 합니다. 이는 해당 업무에서 가장 중요한 임무 중 하나입니다. 데이터 조작 프로세스가 완전하고 정확하며 엄격하지 않으면 모델이 올바르게 작동하지 않습니다.
R Dplyr
R에는 데이터 변환을 돕기 위해 dplyr이라는 라이브러리가 있습니다. dplyr 라이브러리는 기본적으로 데이터를 조작하는 XNUMX가지 함수와 데이터를 정리하는 XNUMX가지 동사를 중심으로 만들어졌습니다. 그런 다음 ggplot 라이브러리를 사용하여 데이터를 분석하고 시각화할 수 있습니다.
우리는 dplyr 라이브러리를 사용하여 데이터 프레임.
R Dplyr를 사용하여 데이터 병합
dplyr은 데이터 세트를 결합하는 훌륭하고 편리한 방법을 제공합니다. 입력 데이터의 소스가 많을 수 있으며 어느 시점에서는 이를 결합해야 합니다. dplyr을 사용한 조인은 원본 데이터 세트의 오른쪽에 변수를 추가합니다.
Dplyr 조인
dplyr에서 두 데이터 세트를 병합하는 데 사용되는 네 가지 중요한 조인 유형은 다음과 같습니다.
| 함수 | 목표 | 인수 | 여러 키 |
|---|---|---|---|
| 왼쪽_결합() | 두 개의 데이터 세트를 병합합니다. 원본 테이블의 모든 관측값을 유지합니다. | 데이터, 출발지, 목적지, 기준 = “ID” | 출발지, 목적지, 기준 = c(“ID”, “ID2”) |
| 오른쪽_결합() | 두 개의 데이터 세트를 병합합니다. 대상 테이블의 모든 관측치를 유지합니다. | 데이터, 출발지, 목적지, 기준 = “ID” | 출발지, 목적지, 기준 = c(“ID”, “ID2”) |
| 내부_조인() | 두 개의 데이터 세트를 병합합니다. 일치하지 않는 모든 행을 제외합니다. | 데이터, 출발지, 목적지, 기준 = “ID” | 출발지, 목적지, 기준 = c(“ID”, “ID2”) |
| 전체_결합() | 두 개의 데이터 세트를 병합합니다. 모든 관찰 내용을 유지합니다. | 데이터, 출발지, 목적지, 기준 = “ID” | 출발지, 목적지, 기준 = c(“ID”, “ID2”) |
쉬운 예를 통해 모든 조인 유형을 학습하겠습니다.
먼저 두 개의 데이터 세트를 구축합니다. 표 1에는 ID와 y라는 두 개의 변수가 포함되어 있는 반면, 표 2에는 ID와 z가 포함되어 있습니다. 각 상황마다 우리는 다음과 같은 조치를 취해야 합니다. 키 쌍 변하기 쉬운. 우리의 경우에는 ID가 우리의 것입니다. 키 변하기 쉬운. 이 함수는 두 테이블 모두에서 동일한 값을 찾고 반환 값을 테이블 1의 오른쪽에 바인딩합니다.
library(dplyr) df_primary <- tribble( ~ID, ~y, "A", 5, "B", 5, "C", 8, "D", 0, "F", 9) df_secondary <- tribble( ~ID, ~z, "A", 30, "B", 21, "C", 22, "D", 25, "E", 29)
Dplyr left_join()
두 데이터세트를 병합하는 가장 일반적인 방법은 left_join() 함수를 사용하는 것입니다. 아래 그림에서 키 쌍이 두 데이터세트의 A, B, C, D 행과 완벽하게 일치하는 것을 볼 수 있습니다. 그러나 E와 F는 남습니다. 이 두 가지 관찰을 어떻게 처리합니까? left_join()을 사용하면 원본 테이블의 모든 변수를 유지하고 대상 테이블에 키 쌍이 없는 변수는 고려하지 않습니다. 이 예에서는 변수 E가 테이블 1에 존재하지 않습니다. 따라서 행이 삭제됩니다. 변수 F는 원본 테이블에서 가져옵니다. left_join() 이후에 유지되며 z 열에 NA를 반환합니다. 아래 그림은 left_join()에서 발생하는 상황을 재현합니다.
dplyr left_join()의 예
left_join(df_primary, df_secondary, by ='ID')
출력:
## # A tibble: 5 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 F 9 NA
Dplyr right_join()
right_join() 함수는 left_join()과 정확히 동일하게 작동합니다. 유일한 차이점은 행이 삭제되었다는 것입니다. 대상 데이터 프레임에서 사용 가능한 E 값은 새 테이블에 존재하며 y 열에 NA 값을 사용합니다.
dplyr right_join()의 예
right_join(df_primary, df_secondary, by = 'ID')
출력:
## # A tibble: 5 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 E NA 29
Dplyr inner_join()
두 데이터 세트가 일치하지 않을 것이라고 100% 확신하면 반환을 고려할 수 있습니다. 만 에 존재하는 행 두 데이터세트. 이는 깨끗한 데이터세트가 필요하거나 누락된 값을 평균이나 중앙값으로 대치하고 싶지 않을 때 가능합니다.
inner_join()이 도움이 됩니다. 이 함수는 일치하지 않는 행을 제외합니다.
dplyr inner_join()의 예
inner_join(df_primary, df_secondary, by ='ID')
출력:
## # A tibble: 4 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25
Dplyr full_join()
마지막으로, full_join() 함수는 모든 관찰을 유지하고 누락된 값을 NA로 바꿉니다.
dplyr full_join()의 예
full_join(df_primary, df_secondary, by = 'ID')
출력:
## # A tibble: 6 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 F 9 NA ## 6 E NA 29
다중 키 쌍
마지막으로, 데이터 세트에 여러 개의 키를 가질 수 있습니다. 고객이 구매한 연도 또는 제품 목록이 있는 다음 데이터 세트를 고려해 보세요.
두 테이블을 병합하려고 하면 R에서 오류가 발생합니다. 이 상황을 해결하려면 두 개의 키 쌍 변수를 전달할 수 있습니다. 즉, 두 데이터 세트에 모두 나타나는 ID와 year입니다. 다음 코드를 사용하여 table1과 table 2를 병합할 수 있습니다.
df_primary <- tribble(
~ID, ~year, ~items,
"A", 2015,3,
"A", 2016,7,
"A", 2017,6,
"B", 2015,4,
"B", 2016,8,
"B", 2017,7,
"C", 2015,4,
"C", 2016,6,
"C", 2017,6)
df_secondary <- tribble(
~ID, ~year, ~prices,
"A", 2015,9,
"A", 2016,8,
"A", 2017,12,
"B", 2015,13,
"B", 2016,14,
"B", 2017,6,
"C", 2015,15,
"C", 2016,15,
"C", 2017,13)
left_join(df_primary, df_secondary, by = c('ID', 'year'))
출력:
## # A tibble: 9 x 4 ## ID year items prices ## <chr> <dbl> <dbl> <dbl> ## 1 A 2015 3 9 ## 2 A 2016 7 8 ## 3 A 2017 6 12 ## 4 B 2015 4 13 ## 5 B 2016 8 14 ## 6 B 2017 7 6 ## 7 C 2015 4 15 ## 8 C 2016 6 15 ## 9 C 2017 6 13
R의 데이터 정리 기능
데이터를 정리(정리)하는 데 중요한 네 가지 기능은 다음과 같습니다.
| 함수 | 목표 | 인수 |
|---|---|---|
| 모으다() | 데이터를 넓은 것에서 긴 것으로 변환 | (데이터, 키, 값, na.rm = FALSE) |
| 확산() | 데이터를 긴 데이터에서 넓은 데이터로 변환 | (데이터, 키, 값) |
| 분리된() | 하나의 변수를 두 개로 나누기 | (data, col, into, sep= “”, 제거 = TRUE) |
| 단위() | 두 개의 변수를 하나로 단위화 | (데이터, 열, 농도, XNUMX월= “”, 제거 = TRUE) |
우리는 tidyr 라이브러리를 사용합니다. 이 라이브러리는 데이터를 조작, 정리, 시각화하는 라이브러리 모음에 속합니다. 아나콘다와 함께 R을 설치하면 라이브러리가 이미 설치되어 있습니다. 여기서 도서관을 찾을 수 있어요. https://anaconda.org/r/r-tidyr.
아직 설치하지 않았다면 다음 명령을 입력하여 tidyr을 설치하세요.
install tidyr : install.packages("tidyr")
모으다()
Gather() 함수의 목적은 데이터를 넓은 데이터에서 긴 데이터로 변환하는 것입니다.
통사론
gather(data, key, value, na.rm = FALSE) Arguments: -data: The data frame used to reshape the dataset -key: Name of the new column created -value: Select the columns used to fill the key column -na.rm: Remove missing values. FALSE by default
예시
아래에서는 넓은 형태를 긴 형태로 재구성하는 개념을 시각화할 수 있습니다. 분기 변수 행으로 채워진 성장이라는 단일 열을 생성하려고 합니다.
library(tidyr)
# Create a messy dataset
messy <- data.frame(
country = c("A", "B", "C"),
q1_2017 = c(0.03, 0.05, 0.01),
q2_2017 = c(0.05, 0.07, 0.02),
q3_2017 = c(0.04, 0.05, 0.01),
q4_2017 = c(0.03, 0.02, 0.04))
messy
출력:
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
# Reshape the data tidier <-messy %>% gather(quarter, growth, q1_2017:q4_2017) tidier
출력:
## country quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02 ## 7 A q3_2017 0.04 ## 8 B q3_2017 0.05 ## 9 C q3_2017 0.01 ## 10 A q4_2017 0.03 ## 11 B q4_2017 0.02 ## 12 C q4_2017 0.04
원래 데이터 세트에는 국가와 키-값 쌍이라는 하나의 그룹 변수가 있으므로 Gather() 함수에서 두 개의 새로운 변수인 Quarter와 Growth를 생성합니다.
확산()
Spread() 함수는 수집과 반대되는 기능을 수행합니다.
통사론
spread(data, key, value) arguments: data: The data frame used to reshape the dataset key: Column to reshape long to wide value: Rows used to fill the new column
예시
Spread()를 사용하면 깔끔한 데이터세트를 다시 지저분하게 만들 수 있습니다.
# Reshape the data messy_1 <- tidier %>% spread(quarter, growth) messy_1
출력:
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
분리된()
Separate() 함수는 구분 기호에 따라 열을 두 개로 분할합니다. 이 함수는 변수가 날짜인 일부 상황에서 유용합니다. 우리의 분석에서는 월과 연도에 초점을 맞춰야 할 수 있으며 열을 두 개의 새로운 변수로 분리하려고 합니다.
통사론
separate(data, col, into, sep= "", remove = TRUE) arguments: -data: The data frame used to reshape the dataset -col: The column to split -into: The name of the new variables -sep: Indicates the symbol used that separates the variable, i.e.: "-", "_", "&" -remove: Remove the old column. By default sets to TRUE.
예시
Separate() 함수를 적용하여 더 깔끔한 데이터세트의 연도에서 분기를 분할할 수 있습니다.
separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)
출력:
## country Qrt year growth ## 1 A q1 2017 0.03 ## 2 B q1 2017 0.05 ## 3 C q1 2017 0.01 ## 4 A q2 2017 0.05 ## 5 B q2 2017 0.07 ## 6 C q2 2017 0.02
맞잡다()
unite() 함수는 두 개의 열을 하나로 결합합니다.
통사론
unit(data, col, conc ,sep= "", remove = TRUE) arguments: -data: The data frame used to reshape the dataset -col: Name of the new column -conc: Name of the columns to concatenate -sep: Indicates the symbol used that unites the variable, i.e: "-", "_", "&" -remove: Remove the old columns. By default, sets to TRUE
예시
위의 예에서 우리는 분기와 연도를 분리했습니다. 만약 우리가 그것들을 합치고 싶다면 어떨까요? 우리는 다음 코드를 사용합니다:
unit_tidier <- separate_tidier %>% unite(Quarter, Qrt, year, sep ="_") head(unit_tidier)
출력:
## country Quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02
제품 개요
- 데이터 분석 추출, 변환, 시각화의 세 부분으로 나눌 수 있습니다.
- R에는 데이터 변환을 돕기 위해 dplyr이라는 라이브러리가 있습니다. dplyr 라이브러리는 기본적으로 데이터를 조작하는 XNUMX가지 함수와 데이터를 정리하는 XNUMX가지 동사를 중심으로 만들어졌습니다.
- dplyr은 데이터 세트를 결합하는 훌륭하고 편리한 방법을 제공합니다. dplyr을 사용한 조인은 원본 데이터세트의 오른쪽에 변수를 추가합니다.
- dplyr의 장점은 다음과 유사한 네 가지 유형의 조인을 처리한다는 것입니다. SQL:
- 왼쪽_결합() – 두 개의 데이터 세트를 병합하고 원본 테이블의 모든 관찰을 유지합니다.
- 오른쪽_결합() – 두 개의 데이터 세트를 병합하고 대상 테이블의 모든 관측치를 유지합니다.
- 내부_조인() – 두 개의 데이터 세트를 병합하고 일치하지 않는 모든 행을 제외합니다.
- 전체_결합() – 두 개의 데이터 세트를 병합하고 모든 관찰 내용을 유지합니다.
- tidyr 라이브러리를 사용하면 다음 함수를 사용하여 데이터 세트를 변환할 수 있습니다.
- 모으다(): 데이터를 넓은 것에서 긴 것으로 변환합니다.
- 확산(): 데이터를 긴 데이터에서 넓은 데이터로 변환합니다.
- 분리된(): 하나의 변수를 두 개로 나눕니다.
- 단위(): 두 개의 변수를 하나로 묶습니다.







