59doit

[ R ] dplyr 패키지 활용 #1 본문

Programming/R

[ R ] dplyr 패키지 활용 #1

yul_S2 2022. 11. 19. 09:37
반응형

install.packages("dplyr")
library(dplyr)

grade_csv.csv
0.00MB

 

 

dplyr 패키지    활용

dplyr 패키지는   데이터프레임    자료구조를    갖는    데이터를   처리하는데   적합한    패키지

 

 

(1) 파이프   연산자(%>%)를   이용한   함수   적용

  • 데이터프레임을 조작하는데 필요한 함수를 순차적으로 적용할 경우 사용할 수 있는 연산자
  • dataframe %>% 함수1() %>% 함수2()
  • %>% 연산자는 인수를 함수에 편하게 적용할 수 있다.
  • %>% 연산자의 >(라이트 앵글 브래킷) 기호는 방향의 의미로 왼쪽에 있는 인자를 오른쪽에 있는 함수에 집어넣는 것이 파이프라인의 기능이다.
  • %>% 연산자를 사용하면 여러 가지 함수를 한 번에 사용할 수 있다.
  • %>% 함수의 큰 장점은 한 번에 한 줄로 코드를 사용할 수 있으므로 함수를 사용할 때마다 따로 저장하는 과정이 없이 여러 함수를 실행할 수 있는 편리성에 있다.
  • %>% 연산자에서 왼쪽 %(퍼센트)를 LHS(Left Hand Side) 변수라고 하며 오른쪽 %(퍼센트)를 RHS(Right Hand Side) 변수라고 한다.


e
x ) iris 데이터셋을 대상으로 ‘%>%’연산자를 이용하여 함수 적용

#1 패키지 설치

install.packages("dplyr")
library(dplyr)
install.packages("lifecycle",type='binary')
library(lifecycle)
install.packages("pillar",type='binary')
library(pillar)

 

#2 

iris %>% head()
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa

iris %>% head() %>% subset(Sepal.Length >= 5.0)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa
  • %>% 함수의 도트(.) 연산자 도트(.) 연산자를 사용하여 LHS가 들어갈 위치를 정할 수 있다. 도트(.) 연산자는 저장한 인자의 이름을 다시 쓰지 않고 데이터를 사용할 수 있다.

 

 

(2) 콘솔 창의 크기에 맞게 데이터 추출 

  • 데이터 셋을 대상으로 콘솔 창의 크기에 맞게 데이터를 추출하고, 나머지는 축약형으로 제공

 

ex ) dplyr 패키지와 hflights 데이터 셋 설치

install.packages(c("dplyr", "hflights"))
library(dplyr)
library(hflights)

 

 

ex ) hflights 데이터 셋 구조 보기

str(hflights)
# 'data.frame': 227496 obs. of  21 variables:
#   $ Year             : int  2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 ...
# $ Month            : int  1 1 1 1 1 1 1 1 1 1 ...
# $ DayofMonth       : int  1 2 3 4 5 6 7 8 9 10 ...
# $ DayOfWeek        : int  6 7 1 2 3 4 5 6 7 1 ...
# $ DepTime          : int  1400 1401 1352 1403 1405 1359 1359 1355 1443 1443 ...
# $ ArrTime          : int  1500 1501 1502 1513 1507 1503 1509 1454 1554 1553 ...
# $ UniqueCarrier    : chr  "AA" "AA" "AA" "AA" ...
# $ FlightNum        : int  428 428 428 428 428 428 428 428 428 428 ...
# $ TailNum          : chr  "N576AA" "N557AA" "N541AA" "N403AA" ...
# $ ActualElapsedTime: int  60 60 70 70 62 64 70 59 71 70 ...
# $ AirTime          : int  40 45 48 39 44 45 43 40 41 45 ...
# $ ArrDelay         : int  -10 -9 -8 3 -3 -7 -1 -16 44 43 ...
# $ DepDelay         : int  0 1 -8 3 5 -1 -1 -5 43 43 ...
# $ Origin           : chr  "IAH" "IAH" "IAH" "IAH" ...
# $ Dest             : chr  "DFW" "DFW" "DFW" "DFW" ...
# $ Distance         : int  224 224 224 224 224 224 224 224 224 224 ...
# $ TaxiIn           : int  7 6 5 9 9 6 12 7 8 6 ...
# $ TaxiOut          : int  13 9 17 22 9 13 15 12 22 19 ...
# $ Cancelled        : int  0 0 0 0 0 0 0 0 0 0 ...
# $ CancellationCode : chr  "" "" "" "" ...
# $ Diverted         : int  0 0 0 0 0 0 0 0 0 0 ...

 

 

ex ) tbl_df()함수 사용하기

hflights_df <- tbl_df(hflights)
hflights_df
# Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum
# <int> <int>      <int>     <int>   <int>   <int> <chr>             <int> <chr>  
#   1  2011     1          1         6    1400    1500 AA                  428 N576AA 
# 2  2011     1          2         7    1401    1501 AA                  428 N557AA 
# 3  2011     1          3         1    1352    1502 AA                  428 N541AA 
# 4  2011     1          4         2    1403    1513 AA                  428 N403AA 
# 5  2011     1          5         3    1405    1507 AA                  428 N492AA 
# 6  2011     1          6         4    1359    1503 AA                  428 N262AA 
# 7  2011     1          7         5    1359    1509 AA                  428 N493AA 
# 8  2011     1          8         6    1355    1454 AA                  428 N477AA 
# 9  2011     1          9         7    1443    1554 AA                  428 N476AA 
# 10  2011     1         10         1    1443    1553 AA                  428 N504AA 

 

  • tbl_df()함수: 현재 R의 console창 크기에서 볼수 있는 만큼 결과를 나타내고, 나머지는 아래에 생략된 행 수와 컬럼명 표시
  • hflights <- hflights %>% tbl_df() 형태로 tbl_df()함수 적용

 

 

(3) 조건에 맞는 데이터 필터링

  • dplyr 패키지의 filter 함수를 사용하여 조건에 맞는 데이터만 추출한다.
  • filter 함수는 조건에 해당하는 데이터의 모든 컬럼을 추출한다
  • filter(dataframe, 조건1, 조건2)

 

 

 

ex ) ==(더블 이퀄) 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(class == 1)
# id class math eng sci
# 1  1     1   50  50  70
# 2  7     1   90  90  70
# 3 10     1   60  80  60
  •  == 연산자를 적용하여 객체의 특정값을 호출한다.

 

ex ) !=(엑스클러메이션 포인트 이퀄) 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(class != 1)
# id class math eng sci
# 1  2     2   20  60  80
# 2  3     3   80  70  90
# 3  4     3   50  80  90
# 4  5     2   40  30  90
# 5  6     2   80  90  80
# 6  8     3   80  90  70
# 7  9     2   90  60  50 
  • != 연산자를 적용하여 객체의 특정값인 아닌 나머지 값들을 호출한다

 

ex ) >(라이트 앵글 브래킷) 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(math > 50)                   
# id class math eng sci
# 1  3     3   80  70  90
# 2  6     2   80  90  80
# 3  7     1   90  90  70
# 4  8     3   80  90  70
# 5  9     2   90  60  50
# 6 10     1   60  80  60  
  • > 연산자를 적용하여 객체의 특정값 초과인 값들을 호출한다

 

ex ) <(레프트 앵글 브래킷) 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(math < 50)
# id class math eng sci
# 1  2     2   20  60  80
# 2  5     2   40  30  90
  • < 연산자를 적용하여 객체의 특정값 미만인 값들을 호출한다.

 

 

ex ) >=(라이트 앵글 브래킷 이퀄) 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(eng >= 80)
# id class math eng sci
# 1  4     3   50  80  90
# 2  6     2   80  90  80
# 3  7     1   90  90  70
# 4  8     3   80  90  70
# 5 10     1   60  80  60
  • >= 연산자를 적용하여 객체의 특정값 이상인 값들을 호출한다

 

 

ex ) <=(레프트 앵글 브래킷 이퀄) 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(eng <= 80)
# id class math eng sci
# 1  1     1   50  50  70
# 2  2     2   20  60  80
# 3  3     3   80  70  90
# 4  4     3   50  80  90
# 5  5     2   40  30  90
# 6  9     2   90  60  50
# 7 10     1   60  80  60
  • <= 연산자를 적용하여 객체의 특정값 이하인 값들을 호출한다

 

ex ) &(앰퍼샌드) 연산자

csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(class == 1 & math >= 50)
# id class math eng sci
# 1  1     1   50  50  70
# 2  7     1   90  90  70
# 3 10     1   60  80  60
  • & 연산자는 객체를 평가하고 객체 모두 TRUE일 때 TRUE로 평가하고 그렇지 않으면 FALSE로 평가한다.
  • & 연산자를 적용하여 여러 조건을 충족하는 행을 추출한다.

 

ex ) |(버티컬바) 연산자

  • | 연산자는 객체를 평가하고 객체가 모두 FALSE일 때 FALSE로 평가하고 그렇지 않으면 TRUE로 평가한다.

 

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(eng < 90 | sci < 50)
# id class math eng sci
# 1  1     1   50  50  70
# 2  2     2   20  60  80
# 3  3     3   80  70  90
# 4  4     3   50  80  90
# 5  5     2   40  30  90
# 6  9     2   90  60  50
# 7 10     1   60  80  60
  • | 연산자를 적용하여 여러 조건 중 하나 이상 충족하는 행을 추출한다

 

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(class == 1 | class == 3 | class == 5)
# id class math eng sci
# 1  1     1   50  50  70
# 2  3     3   80  70  90
# 3  4     3   50  80  90
# 4  7     1   90  90  70
# 5  8     3   80  90  70
# 6 10     1   60  80  60
  • | 연산자를 적용하여 목록에 해당하는 행을 추출한다.

 

ex ) %in% 연산자

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(class %in% c(1, 3, 5))
# id class math eng sci
# 1  1     1   50  50  70
# 2  3     3   80  70  90
# 3  4     3   50  80  90
# 4  7     1   90  90  70
# 5  8     3   80  90  70
# 6 10     1   60  80  60
  • %in% 연산자는 값의 포함 여부를 확인하고 반환한다.
  • %in% 연산자는 여러 객체에서 여러 조건을 줄 때는 사용할 수 없다.
  • 포함된 데이터를 추출하여 반환한다.

 

ex ) 객체 생성

# 객체 생성
class1 <- csvgrade %>% filter(class == 1)

# class1 객체의 math 컬럼에 접근하여 평균 산출
mean(class1$math)
# [1] 66.66667

# class1 객체의 english 컬럼에 접근하여 평균 산출
mean(class1$english)
# [1] 73.33333

# class1 객체의 science 컬럼에 접근하여 평균 산출
mean(class1$science)
# [1] 66.66667
  • 필터링한 데이터의 객체를 생성한다.
  • 데이터의 객체를 생성하여 반환한다.

 

ex ) hflights_df를 대상으로 특정일의 데이터 추출하기

  • 파이프연산자(%>%)사용하여 hflights_df데이터 셋에 filter()함수

 

# 1월 2일 데이터 추출

filter(hflights_df, Month == 1 & DayofMonth == 2) 
# Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum
#                                    
#   1  2011     1          2         7    1401    1501 AA                  428 N557AA 
# 2  2011     1          2         7     719     821 AA                  460 N537AA 
# 3  2011     1          2         7    1959    2106 AA                  533 N461AA 
# 4  2011     1          2         7    1636    1759 AA                 1121 N579AA 
# 5  2011     1          2         7    1823    2132 AA                 1294 N3CCAA 
# 6  2011     1          2         7    1008    1321 AA                 1700 N3ASAA 
# 7  2011     1          2         7    1200    1303 AA                 1820 N589AA 
# 8  2011     1          2         7     907    1018 AA                 1824 N569AA 
# 9  2011     1          2         7     554     912 AA                 1994 N3DCAA 
# 10  2011     1          2         7    1823    2103 AS                  731 N627AS 

 

 

ex ) hflight_df 대상으로 지정된 월의 데이터 추출

# 1월 또는 2월 데이터 추출

filter(hflights_df, Month == 1 | Month == 2) # 1월 또는 2월 데이터 추출
# Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum
# <int> <int>      <int>     <int>   <int>   <int> <chr>             <int> <chr>  
#   1  2011     1          1         6    1400    1500 AA                  428 N576AA 
# 2  2011     1          2         7    1401    1501 AA                  428 N557AA 
# 3  2011     1          3         1    1352    1502 AA                  428 N541AA 
# 4  2011     1          4         2    1403    1513 AA                  428 N403AA 
# 5  2011     1          5         3    1405    1507 AA                  428 N492AA 
# 6  2011     1          6         4    1359    1503 AA                  428 N262AA 
# 7  2011     1          7         5    1359    1509 AA                  428 N493AA 
# 8  2011     1          8         6    1355    1454 AA                  428 N477AA 
# 9  2011     1          9         7    1443    1554 AA                  428 N476AA 
# 10  2011     1         10         1    1443    1553 AA                  428 N504AA 

 

 

 

반응형

'Programming > R' 카테고리의 다른 글

[ R ] dplyr 패키지 활용 #3  (0) 2022.11.19
[ R ] dplyr 패키지 활용 #2  (0) 2022.11.19
[ R ] 주요 내장함수  (0) 2022.11.18
[ R ] 함수의 정의  (0) 2022.11.18
[ R ] 연산자 & 조건문 & 반복문  (0) 2022.11.17
Comments