본문 바로가기
기타/R

R 독학하기 - 5 (2. 데이터 가공)

by cidm 2024. 2. 22.

데이터 가공 (=데이터 전처리(preprocessing) =데이터 핸들링 =데이터 마트(mart))

: 데이터를 분석할 때 변수를 생성하거나 변수명을 변경하고, 조건에 맞는 데이터를 추출하거나 변경하고, 데이터를 정렬하고 병합하는 일련의 과정

: 이렇게 데이터를 준비하는 과정이 실제 데이터를 분석하는 과정보다 어렵고 시간도 오래걸림.


1. 필요한 데이터 추출하기

- 전체 데이터 중에서 필요한 데이터만 추출하기

- 두가지 방법이 있음

1) 사용할 변수를 선택하는 방식

2) 원하는 조건 값에 맞는 데이터를 추출하는 방식

- 데이터 가공에 사용할 데이터 추출, 정렬, 요약, 결합 함수는 dplyr 패키지에 포함된 함수이므로 패키지를 로드한다.

library(dplyr)

- 원시데이터로 Sample1.xlsx를 사용할것이므로 readxl 패키지를 로드한다.

library(readxl)
prac <- read_excel("C:/Rstudy/sources/Sample1.xlsx")
prac

- prac 데이터 세트는 ID, 성별, 나이, 지역, 21년과 20년 AMT(이용금액)와 CNT(이용건수)가 담겨있는 20행 * 13열의 데이터이다.

1) 선택한 변수만 추출하기 : select() 함수

select() 함수 : 데이터 세트에 있는 변수 중 필요한 변수만 추출 가능 - 주로 특정 "열"을 추출할 때 사용

- 변수는 여러 변수 중 필요한 변수만 선택하여 추출할 수도 있고, 지정한 변수를 제외한 나머지 변수를 추출할 수도 있음

 

- 한번에 여러 변수를 추출하고 싶으면 쉼표(,) 기호를 사용한다.

- 특정 변수를 제외하고 나머지를 추출하고 싶으면 빼기(-) 기호를 사용한다.

 

ex) prac 데이터 세트 중 ID 변수(열)만 추출하기

> select(prac$ID)
UseMethod("select")에서 다음과 같은 에러가 발생했습니다:
  클래스 "c('double', 'numeric')"의 객체에 적용된 'select'에 사용할수 있는 메소드가 없습니다

$를 사용해 구문을 작성하면 위와같은 오류가 발생

> prac %>% select(ID)
# A tibble: 20 × 1
      ID
   <dbl>
 1     1
 2     2
 3     3
 4     4
 5     5
 6     6
 7     7
 8     8
 9     9
10    10
11    11
12    12
13    13
14    14
15    15
16    16
17    17
18    18
19    19
20    20

파이프연산자 %>%를 사용해 구문을 작성한다.

 

ex) ID, AREA, Y21_CNT 이 3개 변수를 추출하기

> prac %>% select(ID, AREA, Y21_CNT)
# A tibble: 20 × 3
      ID AREA  Y21_CNT
   <dbl> <chr>   <dbl>
 1     1 서울       50
 2     2 경기       25
 3     3 제주       10
 4     4 서울        8
 5     5 서울       30
 6     6 서울        1
 7     7 경기        2
 8     8 서울       10
 9     9 서울        4
10    10 경기       17
11    11 서울        5
12    12 제주       53
13    13 경기       35
14    14 제주       15
15    15 경기       16
16    16 서울       15
17    17 경기        8
18    18 서울        5
19    19 제주       15
20    20 제주        4

 

ex) AREA 변수만 제외하고 나머지 추출하기

prac %>% select(-AREA)

 

ex) AREA, SEX, CAR_YN 제외하고 나머지 추출하기

prac %>% select(-AREA, -SEX, -CAR_YN)

 

2) 필요한 데이터만 추출하기 : filter() 함수

filter() 함수 : 필요한 조건을 지정해 조건에 맞는 데이터만 추출하기 (논리연산자, 조건문 사용)

 

ex) 연령이 20세 이상 30세 미만인 경우만 추출하기

> prac %>% filter( 20 <= AGE < 30 )
에러: 예기치 않은 '<'입니다 in "prac %>% filter( 20 <= AGE <"

## 한번에 작성하니 에러가 발생. & 연산자를 사용해 20세 이상과 30세 미만 조건을 각각 작성한다.

> prac %>% filter( 20 <= AGE & AGE < 30 )
# A tibble: 7 × 13
     ID SEX     AGE AREA  CAR_YN Y21_AMT Y21_CNT Y21F_AMT Y21O_CNT Y20_AMT Y20_CNT
  <dbl> <chr> <dbl> <chr>  <dbl>   <dbl>   <dbl>    <dbl>    <dbl>   <dbl>   <dbl>
1     3 F        28 제주       0  275000      10     7500        3  500000       7
2     5 M        27 서울       1  845000      30   130000       11  760000      28
3     6 F        23 서울       0   42900       1        0        1  300000       6
4     9 M        20 서울       0  930000       4    50000        3  250000       2
5    18 F        29 서울       1  150000       5     7000        3  100000       5
6    19 F        27 제주       0  300000      15   150000       10  320000      27
7    20 M        27 제주       1  130000       4    38000        2  150000      30
# ℹ 2 more variables: Y20F_AMT <dbl>, Y20O_CNT <dbl>

 

* 조건문 데이터가 문자형(chr) 일때는 따옴표('', "")를 붙여야 알아들음.

 

2. 데이터 정렬하기 : arrange() 함수

- 변수를 크기순으로 정렬하기 : arrange() 함수

- 기본값: 오름차순 정렬 / 내림차순 정렬 하려면 desc() 함수를 추가적으로 사용

 

ex) prac 데이터세트에서 나이가 적은 순서대로 정렬하기

> prac %>% arrange(AGE)
# A tibble: 20 × 13
      ID SEX     AGE AREA  CAR_YN Y21_AMT Y21_CNT Y21F_AMT Y21O_CNT Y20_AMT Y20_CNT
   <dbl> <chr> <dbl> <chr>  <dbl>   <dbl>   <dbl>    <dbl>    <dbl>   <dbl>   <dbl>
 1     9 M        20 서울       0  930000       4    50000        3  250000       2
 2     6 F        23 서울       0   42900       1        0        1  300000       6
 3     5 M        27 서울       1  845000      30   130000       11  760000      28
 4    19 F        27 제주       0  300000      15   150000       10  320000      27
 5    20 M        27 제주       1  130000       4    38000        2  150000      30
 6     3 F        28 제주       0  275000      10     7500        3  500000       7
 7    18 F        29 서울       1  150000       5     7000        3  100000       5
 8    17 M        30 경기       1  250000       8    70000        6  400000      10
 9    16 F        32 서울       1  530000      15   380000        7 1000000      43
10    11 M        35 서울       0  150000       5    10000        3  490000      25
11    10 F        38 경기       0  520000      17    11000       10  550000      16
12     2 M        40 경기       1  450000      25    50000       10  700000      30
13    12 F        44 제주       1 1150000      53   270000       37 1150000      48
14    15 F        46 경기       1  600000      16   105000        4 1000000      20
15     8 F        47 서울       1  650000      10    45000        6  400000       7
16     1 F        50 서울       1 1300000      50   170000       25 1000000      40
17     4 M        50 서울       0 2300000       8    50000        3 2500000       3
18    14 M        55 제주       1 1050000      15   300000        5 2900000      18
19     7 F        56 경기       0  150000       2     5000        1  130000       2
20    13 F        60 경기       0  550000      35   120000       10  800000      32
# ℹ 2 more variables: Y20F_AMT <dbl>, Y20O_CNT <dbl>

ex2) 나이 많은순서대로 정렬하기

> prac %>% arrange(desc(AGE))
# A tibble: 20 × 13
      ID SEX     AGE AREA  CAR_YN Y21_AMT Y21_CNT Y21F_AMT Y21O_CNT Y20_AMT Y20_CNT
   <dbl> <chr> <dbl> <chr>  <dbl>   <dbl>   <dbl>    <dbl>    <dbl>   <dbl>   <dbl>
 1    13 F        60 경기       0  550000      35   120000       10  800000      32
 2     7 F        56 경기       0  150000       2     5000        1  130000       2
 3    14 M        55 제주       1 1050000      15   300000        5 2900000      18
 4     1 F        50 서울       1 1300000      50   170000       25 1000000      40
 5     4 M        50 서울       0 2300000       8    50000        3 2500000       3
 6     8 F        47 서울       1  650000      10    45000        6  400000       7
 7    15 F        46 경기       1  600000      16   105000        4 1000000      20
 8    12 F        44 제주       1 1150000      53   270000       37 1150000      48
 9     2 M        40 경기       1  450000      25    50000       10  700000      30
10    10 F        38 경기       0  520000      17    11000       10  550000      16
11    11 M        35 서울       0  150000       5    10000        3  490000      25
12    16 F        32 서울       1  530000      15   380000        7 1000000      43
13    17 M        30 경기       1  250000       8    70000        6  400000      10
14    18 F        29 서울       1  150000       5     7000        3  100000       5
15     3 F        28 제주       0  275000      10     7500        3  500000       7
16     5 M        27 서울       1  845000      30   130000       11  760000      28
17    19 F        27 제주       0  300000      15   150000       10  320000      27
18    20 M        27 제주       1  130000       4    38000        2  150000      30
19     6 F        23 서울       0   42900       1        0        1  300000       6
20     9 M        20 서울       0  930000       4    50000        3  250000       2
# ℹ 2 more variables: Y20F_AMT <dbl>, Y20O_CNT <dbl>

 

1) 중첩 정렬하기

중첩정렬: 여러 변수를 기준으로 중첩하여 정렬하는 것

- 기준이 될 변수를 쉼표(,)로 나열하여 작성하면 됨

 

ex) Y21_AMT 변수가 많은순으로, Y20_AMT가 많은순으로 정렬

> prac %>% arrange(desc(Y21_AMT), desc(Y20_AMT))
# A tibble: 20 × 13
      ID SEX     AGE AREA  CAR_YN Y21_AMT Y21_CNT Y21F_AMT Y21O_CNT Y20_AMT Y20_CNT
   <dbl> <chr> <dbl> <chr>  <dbl>   <dbl>   <dbl>    <dbl>    <dbl>   <dbl>   <dbl>
 1     4 M        50 서울       0 2300000       8    50000        3 2500000       3
 2     1 F        50 서울       1 1300000      50   170000       25 1000000      40
 3    12 F        44 제주       1 1150000      53   270000       37 1150000      48
 4    14 M        55 제주       1 1050000      15   300000        5 2900000      18
 5     9 M        20 서울       0  930000       4    50000        3  250000       2
 6     5 M        27 서울       1  845000      30   130000       11  760000      28
 7     8 F        47 서울       1  650000      10    45000        6  400000       7
 8    15 F        46 경기       1  600000      16   105000        4 1000000      20
 9    13 F        60 경기       0  550000      35   120000       10  800000      32
10    16 F        32 서울       1  530000      15   380000        7 1000000      43
11    10 F        38 경기       0  520000      17    11000       10  550000      16
12     2 M        40 경기       1  450000      25    50000       10  700000      30
13    19 F        27 제주       0  300000      15   150000       10  320000      27
14     3 F        28 제주       0  275000      10     7500        3  500000       7
15    17 M        30 경기       1  250000       8    70000        6  400000      10
16    11 M        35 서울       0  150000       5    10000        3  490000      25
17     7 F        56 경기       0  150000       2     5000        1  130000       2
18    18 F        29 서울       1  150000       5     7000        3  100000       5
19    20 M        27 제주       1  130000       4    38000        2  150000      30
20     6 F        23 서울       0   42900       1        0        1  300000       6
# ℹ 2 more variables: Y20F_AMT <dbl>, Y20O_CNT <dbl>

Y21_AMT가 15만으로 동일한 3개의 관측치는 Y20_AMT가 많은 순으로 정렬된 것을 확인할 수 있음

 

3. 데이터 요약하기 : summarize() 함수, group_by() 함수

summarize() 함수 : 기술통계 함수와 같이 사용하며, 데이터를 요약할 때 사용한다.
더보기

4. 1) 데이터 전체 요약하기 : summarize() 함수

summarise() 함수 = summarize() 함수 : 기술 통계 함수와 함께 사용하여 데이터 요약을 확인할 때 사용

summarize(데이터, 요약한 컬럼의 새로운 이름 = 기술통계 함수(데이터의 컬럼 명))

출처: https://rlawkdus.tistory.com/21 [하나하나차곡차곡:티스토리]

- 예를 들어 지정한 변수의 평균을 내려면 mean() 함수와 함께 사용하여 mean() 함수로 도출한 평균이 새 변수명에 할당되면 summarize() 함수로 데이터 요약 정보가 출력된다.

 

ex) prac 데이터셋에서 21년 이용금액(Y21_AMT) 변수 값의 평균내기

> prac %>% summarize(Mean_Y21_AMT = mean(Y21_AMT))
# A tibble: 1 × 1
  Mean_Y21_AMT
         <dbl>
1       616145

 

1) 그룹별 합계 도출하기

데이터를 집단별로 나누어 요약하기

- summarize() 함수와 group_by() 함수를 연계해서 사용하면 그룹별로 데이터 요약을 할 수 있다.

더보기

group_by() 함수 : 그룹별로 데이터를 요약할 때 사용

group_by(데이터, 변수명)

- group_by() 함수는 데이터를 지정한 조건에 따라 그룹으로 묶는 역할을 하므로 단독으로 쓰기보다는 다른 함수와 같이 사용하는 경우가 많음

출처: https://rlawkdus.tistory.com/21 [하나하나차곡차곡:티스토리]

ex) prac 데이터셋의 AREA 변수값에 따른 Y21_AMT 변수의 합계를 도출하기

- AREA 변수의 값을 그룹 짓는다 -> 그룹별 합계를 새로운 변수로 도출한다.

> prac %>% group_by(AREA) %>% summarize(SUM_Y21_AMT = sum(Y21_AMT))
# A tibble: 3 × 2
  AREA  SUM_Y21_AMT
  <chr>       <dbl>
1 경기      2520000
2 서울      6897900
3 제주      2905000

ex) 성별에 따른 21년 이용건수 평균내기

> prac %>% group_by(SEX) %>% summarize(mean_21AMT = mean(Y21_AMT))
# A tibble: 2 × 2
  SEX   mean_21AMT
  <chr>      <dbl>
1 F        518158.
2 M        763125 

ex) 20대, 30대, 40대 이런식으로 디테일하게 그룹화해서 각 연령대별 21년 이용건수 평균내기 (오래걸렸다..)

> max(prac$AGE)
[1] 60
> prac$group_age <- ifelse(prac$AGE < 30, "20대",
+                          ifelse(prac$AGE < 40, "30대",
+                                 ifelse(prac$AGE<50, "40대",
+                                        ifelse(prac$AGE<60, "50대", "60대"))))
> table(prac$group_age)

20대 30대 40대 50대 60대 
   7    4    4    4    1 
> mutate(prac, prac$group_age)
# A tibble: 20 × 15
      ID SEX     AGE AREA  CAR_YN Y21_AMT Y21_CNT Y21F_AMT Y21O_CNT Y20_AMT Y20_CNT
   <dbl> <chr> <dbl> <chr>  <dbl>   <dbl>   <dbl>    <dbl>    <dbl>   <dbl>   <dbl>
 1     1 F        50 서울       1 1300000      50   170000       25 1000000      40
 2     2 M        40 경기       1  450000      25    50000       10  700000      30
 3     3 F        28 제주       0  275000      10     7500        3  500000       7
 4     4 M        50 서울       0 2300000       8    50000        3 2500000       3
 5     5 M        27 서울       1  845000      30   130000       11  760000      28
 6     6 F        23 서울       0   42900       1        0        1  300000       6
 7     7 F        56 경기       0  150000       2     5000        1  130000       2
 8     8 F        47 서울       1  650000      10    45000        6  400000       7
 9     9 M        20 서울       0  930000       4    50000        3  250000       2
10    10 F        38 경기       0  520000      17    11000       10  550000      16
11    11 M        35 서울       0  150000       5    10000        3  490000      25
12    12 F        44 제주       1 1150000      53   270000       37 1150000      48
13    13 F        60 경기       0  550000      35   120000       10  800000      32
14    14 M        55 제주       1 1050000      15   300000        5 2900000      18
15    15 F        46 경기       1  600000      16   105000        4 1000000      20
16    16 F        32 서울       1  530000      15   380000        7 1000000      43
17    17 M        30 경기       1  250000       8    70000        6  400000      10
18    18 F        29 서울       1  150000       5     7000        3  100000       5
19    19 F        27 제주       0  300000      15   150000       10  320000      27
20    20 M        27 제주       1  130000       4    38000        2  150000      30
# ℹ 4 more variables: Y20F_AMT <dbl>, Y20O_CNT <dbl>, group_age <chr>,
#   `prac$group_age` <chr>
> View(prac)
> select(prac, ID, SEX, AGE, AREA, Y21_AMT, group_age)
# A tibble: 20 × 6
      ID SEX     AGE AREA  Y21_AMT group_age
   <dbl> <chr> <dbl> <chr>   <dbl> <chr>    
 1     1 F        50 서울  1300000 50대     
 2     2 M        40 경기   450000 40대     
 3     3 F        28 제주   275000 20대     
 4     4 M        50 서울  2300000 50대     
 5     5 M        27 서울   845000 20대     
 6     6 F        23 서울    42900 20대     
 7     7 F        56 경기   150000 50대     
 8     8 F        47 서울   650000 40대     
 9     9 M        20 서울   930000 20대     
10    10 F        38 경기   520000 30대     
11    11 M        35 서울   150000 30대     
12    12 F        44 제주  1150000 40대     
13    13 F        60 경기   550000 60대     
14    14 M        55 제주  1050000 50대     
15    15 F        46 경기   600000 40대     
16    16 F        32 서울   530000 30대     
17    17 M        30 경기   250000 30대     
18    18 F        29 서울   150000 20대     
19    19 F        27 제주   300000 20대     
20    20 M        27 제주   130000 20대     
> prac %>% group_by(group_age)%>%summarize(mean_21AMT2 = mean(Y21_AMT))
# A tibble: 5 × 2
  group_age mean_21AMT2
  <chr>           <dbl>
1 20대          381843.
2 30대          362500 
3 40대          712500 
4 50대         1200000 
5 60대          550000 

 

4. 데이터 결합하기

- 결합(join) : 2개 이상의 테이블을 결합하여 하나의 테이블로 만드는 것

- 결합의 종류 

  1. 세로결합 bind_rows()
  2. 가로결합
    1. left_join()
    2. inner_join()
    3. full_join()

1) 세로 결합

- 결합할 테이블에 있는 변수명을 기준으로 결합 (공통 변수를 기준으로 결합하고, 서로 겹치지 않는 변수는 모두 새로운 테이블에 추가됨)

- bind_rows() 함수 사용, 결합하려는 테이블명을 쉼표(,)로 나열

> library(readxl)
> mcard <- read_excel("C:/Rstudy/sources/Sample2_m_history.xlsx")
> fcard <- read_excel("C:/Rstudy/sources/Sample3_f_history.xlsx")
> mcard
# A tibble: 4 × 8
     ID SEX     AGE AREA   AMT21 Y21_CNT  AMT20 Y20_CNT
  <dbl> <chr> <dbl> <chr>  <dbl>   <dbl>  <dbl>   <dbl>
1     2 M        40 경기  450000      25 700000      30
2     4 M        50 서울  400000       8 125000       3
3     5 M        27 서울  845000      30 760000      28
4     9 M        20 인천  930000       4 250000       2
> fcard
# A tibble: 6 × 8
     ID SEX     AGE AREA    AMT21 Y21_CNT  AMT20 Y20_CNT
  <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>  <dbl>   <dbl>
1     1 F        50 서울  1300000      50 100000      40
2     3 F        28 제주   275000      10  50000       5
3     6 F        23 서울    42900       1 300000       6
4     7 F        56 경기   150000       2 130000       2
5     8 F        47 서울   570000      10 400000       7
6    10 F        38 경기   520000      17 550000      16
> table_join <- bind_rows(mcard, fcard)
> table_join
# A tibble: 10 × 8
      ID SEX     AGE AREA    AMT21 Y21_CNT  AMT20 Y20_CNT
   <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>  <dbl>   <dbl>
 1     2 M        40 경기   450000      25 700000      30
 2     4 M        50 서울   400000       8 125000       3
 3     5 M        27 서울   845000      30 760000      28
 4     9 M        20 인천   930000       4 250000       2
 5     1 F        50 서울  1300000      50 100000      40
 6     3 F        28 제주   275000      10  50000       5
 7     6 F        23 서울    42900       1 300000       6
 8     7 F        56 경기   150000       2 130000       2
 9     8 F        47 서울   570000      10 400000       7
10    10 F        38 경기   520000      17 550000      16

 

2) 가로결합

가로결합 방식 함수는 테이블 결합 기준이 되는 변수가 필요하다.
이를 키(key) 변수라고 하며, by = "변수명"  형태로 지정한다.

키 변수는 결합할 각 테이블 모두에 있어야하며, 한쪽이라도 키 변수가 없으면 실행되지 않음

키 변수가 각 테이블에 지정된 이름이 다를 떄는 변수명을 먼저 통일한후 실행해야함

(1) left_join() 함수 : 지정한 변수와 테이블1을 기준으로 테이블2에 있는 나머지 변수들을 결합함

테이블1에만 있는 기준변수의 행만 출력 (A ∩ Bc)

left_join(테이블1, 테이블2, by = "변수명")

(2) inner_join() 함수 : 테이블1과 테이블2에서 기준으로 지정한 변수값이 동일할 때만 결합

테이블1과 테이블2에 공통적으로 있는 기준변수의 행을 출력 (A ∩ B)

inner_join(테이블1, 테이블2, by = "변수명")

(3) full_join() 함수 : 테이블1과 테이블2에서 기준으로 지정한 변수값 전체를 결합

테이블1과 테이블2에 있는 모든 기준변수의 행을 출력 (A∪B)

full_join(테이블1, 테이블2, by = "변수명")
> jeju_21 <- read_excel("C:/Rstudy/sources/Sample4_y21_history.xlsx")
> jeju_20 <- read_excel("C:/Rstudy/sources/Sample5_y20_history.xlsx")
> jeju_21
# A tibble: 8 × 6
     ID SEX     AGE AREA    AMT21 Y21_CNT
  <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>
1     1 F        50 서울  1300000      50
2     2 M        40 경기   450000      25
3     4 M        50 서울   400000       8
4     5 M        27 서울   845000      30
5     7 F        56 경기   150000       2
6     8 F        47 서울   570000      10
7     9 M        20 인천   930000       4
8    10 F        38 경기   520000      17
> jeju_20
# A tibble: 9 × 3
     ID  AMT20 Y20_CNT
  <dbl>  <dbl>   <dbl>
1     1 100000      40
2     2 700000      30
3     3  50000       5
4     4 125000       3
5     5 760000      28
6     6 300000       6
7     7 130000       2
8     8 400000       7
9    10 550000      16
> # 두 테이블 모두 ID 변수열을 가지고 있으므로 병합 가능
> join1 <- left_join(jeju_21, jeju_20, by = "ID")
> join1
# A tibble: 8 × 8
     ID SEX     AGE AREA    AMT21 Y21_CNT  AMT20 Y20_CNT
  <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>  <dbl>   <dbl>
1     1 F        50 서울  1300000      50 100000      40
2     2 M        40 경기   450000      25 700000      30
3     4 M        50 서울   400000       8 125000       3
4     5 M        27 서울   845000      30 760000      28
5     7 F        56 경기   150000       2 130000       2
6     8 F        47 서울   570000      10 400000       7
7     9 M        20 인천   930000       4     NA      NA
8    10 F        38 경기   520000      17 550000      16
> #left_join() 함수는 테이블1에 있는 기준변수의 행만 나타냄
> join2 <- inner_join(jeju_21, jeju_20, by="ID")
> join2
# A tibble: 7 × 8
     ID SEX     AGE AREA    AMT21 Y21_CNT  AMT20 Y20_CNT
  <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>  <dbl>   <dbl>
1     1 F        50 서울  1300000      50 100000      40
2     2 M        40 경기   450000      25 700000      30
3     4 M        50 서울   400000       8 125000       3
4     5 M        27 서울   845000      30 760000      28
5     7 F        56 경기   150000       2 130000       2
6     8 F        47 서울   570000      10 400000       7
7    10 F        38 경기   520000      17 550000      16
> #inner_join() 함수는 테이블1과 테이블2 모두에 있는 기준변수의 행만 나타냄
> join3 <- full_join(jeju_21, jeju_20, by="ID")
> join3
# A tibble: 10 × 8
      ID SEX     AGE AREA    AMT21 Y21_CNT  AMT20 Y20_CNT
   <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>  <dbl>   <dbl>
 1     1 F        50 서울  1300000      50 100000      40
 2     2 M        40 경기   450000      25 700000      30
 3     4 M        50 서울   400000       8 125000       3
 4     5 M        27 서울   845000      30 760000      28
 5     7 F        56 경기   150000       2 130000       2
 6     8 F        47 서울   570000      10 400000       7
 7     9 M        20 인천   930000       4     NA      NA
 8    10 F        38 경기   520000      17 550000      16
 9     3 NA       NA NA         NA      NA  50000       5
10     6 NA       NA NA         NA      NA 300000       6
> arrange(join3, ID)
# A tibble: 10 × 8
      ID SEX     AGE AREA    AMT21 Y21_CNT  AMT20 Y20_CNT
   <dbl> <chr> <dbl> <chr>   <dbl>   <dbl>  <dbl>   <dbl>
 1     1 F        50 서울  1300000      50 100000      40
 2     2 M        40 경기   450000      25 700000      30
 3     3 NA       NA NA         NA      NA  50000       5
 4     4 M        50 서울   400000       8 125000       3
 5     5 M        27 서울   845000      30 760000      28
 6     6 NA       NA NA         NA      NA 300000       6
 7     7 F        56 경기   150000       2 130000       2
 8     8 F        47 서울   570000      10 400000       7
 9     9 M        20 인천   930000       4     NA      NA
10    10 F        38 경기   520000      17 550000      16
> #full_join() 함수는 테이블1과 테이블2에 있는 기준변수의 행을 모두 나타냄

- 관측치가 없을 때는 NA가 삽입된다.


함수 기능
select() dplyr / 변수(열) 추출
filter()  dplyr / 조건에 맞는 행 추출
arrange() dplyr / 지정한 열을 기준으로 정렬 (기본: 오름차순)
summarize() dplyr / 데이터 요약
group_by() dplyr / 데이터 그룹화
bind_rows() dplyr / 데이터 세로 결합
left_joins() dplyr / 데이터 가로 결합 (A Bc)
inner_joins() dplyr / 데이터 가로 결합 (A ∩ B)
full_joins() dplyr / 데이터 가로 결합 (A∪B)

'기타 > R' 카테고리의 다른 글

R 독학하기 - 5 (4. 데이터 정제)  (0) 2024.02.23
R 독학하기 - 5 (3. 데이터 구조 변형)  (0) 2024.02.22
R 독학하기 - 5 (1. dplyr 패키지)  (0) 2024.02.16
R 독학하기 - 4 (3)  (1) 2024.02.15
R 독학하기 - 4 (2)  (1) 2024.02.14