59doit

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

Programming/R

[ R ] dplyr 패키지 활용 #2

yul_S2 2022. 11. 19. 11:47
반응형

 

(4) 컬럼으로 데이터 정렬

  • 데이터 셋의 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 정렬하는 arrange()함수 사용
  • arrange(dataframe, 컬럼1, 컬럼2, …) #default는 오름차순
  • arrange(dataframe, desc(컬럼1, …)) #desc()함수로 지정하는 경우 내림차순

 

ex ) 단일 객체의 오름차순 정렬

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% arrange(math)
# id class math eng sci
# 1   2     2   20  60  80
# 2   5     2   40  30  90
# 3   1     1   50  50  70
# 4   4     3   50  80  90
# 5  10     1   60  80  60
# 6   3     3   80  70  90
# 7   6     2   80  90  80
# 8   8     3   80  90  70
# 9   7     1   90  90  70
# 10  9     2   90  60  50
  • 오름차순으로 데이터를 정렬하여 추출

 

ex ) 단일 객체의 내림차순 정렬

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% arrange(desc(math))
# id class math eng sci
# 1   7     1   90  90  70
# 2   9     2   90  60  50
# 3   3     3   80  70  90
# 4   6     2   80  90  80
# 5   8     3   80  90  70
# 6  10     1   60  80  60
# 7   1     1   50  50  70
# 8   4     3   50  80  90
# 9   5     2   40  30  90
# 10  2     2   20  60  80
  • arrange 함수를 이용하여 데이터를 내림차순으로 정렬하여 추출하려면 기준 객체에 desc 함수를 적용한다.
  • 내림차순으로 데이터를 정렬하여 추출한다.

 

ex ) 다중 객체의 오름차순 정렬

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% arrange(class, math)
# id class math eng sci
# 1   1     1   50  50  70
# 2  10     1   60  80  60
# 3   7     1   90  90  70
# 4   2     2   20  60  80
# 5   5     2   40  30  90
# 6   6     2   80  90  80
# 7   9     2   90  60  50
# 8   4     3   50  80  90
# 9   3     3   80  70  90
# 10  8     3   80  90  70
  • arrange 함수를 이용하여 다중 객체의 데이터를 ,(콤마)로 기준으로 오름차순으로 정렬하며 추출한다.
  • 여러 객체의 데이터를 오름차순으로 정렬하여 추출한다

 

ex ) hglights_df를 대상으로 데이터 정렬

arrange(hflights_df, Year, Month, DepTime, ArrTime)
# Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum
# <int> <int>      <int>     <int>   <int>   <int> <chr>             <int> <chr>  
#   1  2011     1          1         6       1     621 CO                 1542 N76254 
# 2  2011     1         21         5       4      46 XE                 2956 N13997 
# 3  2011     1          4         2       5      59 OO                 1118 N745SK 
# 4  2011     1         27         4      11     216 CO                  209 N17730 
# 5  2011     1         27         4      17     240 XE                 2771 N11565 
# 6  2011     1          9         7      22     117 WN                   55 N506SW 
# 7  2011     1         28         5     226     310 XE                 2956 N11535 
# 8  2011     1         18         2     537     829 DL                 1248 N302NB 
# 9  2011     1         25         2     538     824 DL                 1248 N355NB 
# 10  2011     1          7         5     538     832 DL                 1248 N337NB 
  • 오름차순 정렬 시 우선순위는 가장 왼쪽의 컬럼부터 시작하여 오른쪽 컬럼 순으로 정렬
  • 파이프 연산자를 사용하여 hflights_df 데이터 셋에 arrange()함수 적용
  • hflights_df %>% arrange(Year, Month, DepTime, AirTime) 

 

 

 

(5) 컬럼으로 데이터 검색

  • 데이터 셋의 특정 컬럼을 기준으로 데이터 검색 시 select()함수
  •  select(dataframe, 컬럼1, 컬럼2, …)
  • select 함수는 추출하고자 하는 객체를 할당하면 해당 객체만 추출한다.

 

ex ) 단일 객체

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% select(math)
#   math
# 1    50
# 2    20
# 3    80
# 4    50
# 5    40
# 6    80
# 7    90
# 8    80
# 9    90
# 10   60
  • 단일 객체를 추출하여 반환한다.

 

ex ) 다중 객체

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% select(class, math)
#  class math
# 1      1   50
# 2      2   20
# 3      3   80
# 4      3   50
# 5      2   40
# 6      2   80
# 7      1   90
# 8      3   80
# 9      2   90
# 10     1   60
  • select 함수의 인자에 ,(콤마)를 활용하여 여러 객체를 추출한다.
  • 여러 객체를 추출하여 반환한다.

 

ex ) 객체 제외

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% select(-math)
#    id class eng sci
# 1   1     1  50  70
# 2   2     2  60  80
# 3   3     3  70  90
# 4   4     3  80  90
# 5   5     2  30  90
# 6   6     2  90  80
# 7   7     1  90  70
# 8   8     3  90  70
# 9   9     2  60  50
# 10 10     1  80  60
  • select 함수의 인자에 -(마이너스) 연산자를 활용하여 객체 제외하고 추출한다.
  • 객체 제외하고 추출하여 반환한다.

 

 

ex ) %>% 함수 적용

  • %>% 함수를 적용하여 함수를 조합하여 구현한다.
  • %>% 함수를 적용하면 코드의 길이가 줄어들어 이해하기도 쉽고 실행하는데 불필요한 부분이 줄어들어 시간이 단축된다.

 

# 특정 객체의 값을 추출한다.

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% filter(class == 1 ) %>% select(eng)
# eng
# 1  50
# 2  90
# 3  80

 

 

# 특정 객체의 값 일부를 추출한다

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% select(id, math) %>% head(3)
# id math
# 1  1   50
# 2  2   20
# 3  3   80

 

 

 

 

ex ) hflights_df를 대상으로 지정된 컬럼 데이터 검색

select(hflights_df, Year, Month, DepTime, ArrTime)
# Year Month DepTime ArrTime
# <int> <int>   <int>   <int>
#   1  2011     1    1400    1500
# 2  2011     1    1401    1501
# 3  2011     1    1352    1502
# 4  2011     1    1403    1513
# 5  2011     1    1405    1507
# 6  2011     1    1359    1503
# 7  2011     1    1359    1509
# 8  2011     1    1355    1454
# 9  2011     1    1443    1554
# 10  2011     1    1443    1553
  • hflights_df %>% select(hflights_df, Year, Month, DepTime, AirTime)

 

ex ) hflights_df 대상 컬럼의 범위로 검색

select(hflights_df, Year:ArrTime)
# Year Month DayofMonth DayOfWeek DepTime ArrTime
# <int> <int>      <int>     <int>   <int>   <int>
#   1  2011     1          1         6    1400    1500
# 2  2011     1          2         7    1401    1501
# 3  2011     1          3         1    1352    1502
# 4  2011     1          4         2    1403    1513
# 5  2011     1          5         3    1405    1507
# 6  2011     1          6         4    1359    1503
# 7  2011     1          7         5    1359    1509
# 8  2011     1          8         6    1355    1454
# 9  2011     1          9         7    1443    1554
# 10  2011     1         10         1    1443    1553
  • select()함수 사용시 특정 컬럼만이 아닌 컬럼의 범위 설정 가능
  • 검색조건으로 시작걸럼:종료컬럼 형식으로 컬럼 범위의 시작과 끝을 지정
  • 특정 컬럼 또는 컬럼의 범위를 검색에서 제외하려는 경우 제외하려는 컬럼 이름 또는 범위 앞에 “-“속성을 지정

 

 

(6) 데이터셋에 컬럼 추가

  • 데이터 셋에 특정 컬럼을 추가하는 mutate()함수
  • mutate(dataframe, 컬럼명1=수식1, 컬럼명2=수식2, …)

 

ex ) hflights_df에서 출발 지연시간과 도착 지연시간의 차이를 계산한 컬럼 추가

mutate(hflights_df, gain = ArrTime - DepTime, 
       gain_per_hour = gain / (AirTime / 60))

# 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 

 

 

 

ex ) mutate()함수에 의해 추가된 컬럼 보기

select(mutate(hflights_df, gain = ArrDelay - DepDelay,  gain_per_hour = gain / (AirTime / 60)),
       Year, Month, ArrDelay, DepDelay, gain, gain_per_hour)

# Year Month ArrDelay DepDelay  gain gain_per_hour
# <int> <int>    <int>    <int> <int>         <dbl>
#   1  2011     1      -10        0   -10        -15   
# 2  2011     1       -9        1   -10        -13.3 
# 3  2011     1       -8       -8     0          0   
# 4  2011     1        3        3     0          0   
# 5  2011     1       -3        5    -8        -10.9 
# 6  2011     1       -7       -1    -6         -8   
# 7  2011     1       -1       -1     0          0   
# 8  2011     1      -16       -5   -11        -16.5 
# 9  2011     1       44       43     1          1.46
# 10  2011     1       43       43     0          0  
  • console창 크기 이외의 컬럼명 확인이 어려운 경우 select()함수 안에 mutate()함수 사용

 

 

(7) 요약통계 구하기

  • 데이터 셋에 특정 컬럼을 대상으로 기술통계량을 계산하는 summarise() 함수
  •  summarise(dataframe, 추가할 컬럼명 = 함수(컬럼명), …)
  • 컬럼의 평균과 같이 컬럼을 요약한 통계량을 구할 때는 summarise 함수와 group_by 함수를 사용한다.
  • 구한 결과를 요약표로 만들면 컬럼의 집단 간에 어떤 차이가 있고 어떤 분포를 갖는지 쉽게 파악할 수 있다.
  • 그룹으로 나눈 데이터는 다른 분석에도 사용할 수 있으므로 활용도가 매우 높다.
  • 전체의 평균, 표준편차, 사분위수 등 전체적인 값들에 대한 요약 통계량을 산출할 때는 summary 함수를 사용하고, 개별 컬럼의 데이터에 대한 요약 통계량을 구할 때는 summarise 함수를 사용한다.

 

ex ) 컬럼 데이터의 요약 통계량을 반환한다

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% summarise(mean_math = mean(math))
# mean_math
# 1        64

 

 

 

ex ) hflights_df에서 비행시간의 평균 구하기

summarise(hflights_df, avgAirTime = mean(AirTime, na.rm = TRUE))
# avgAirTime
# <dbl>
#   1       108

hflights_df %>% summarise(avgAirTime = mean(AirTime, na.rm = TRUE))
# avgAirTime
# <dbl>
#   1       108
  • mean()함수를 사용하여 평균을 계산하여 avgAirTime변수에 저장
  • 뒤의 결과 값은 같다

 

ex ) hflights_df 의 관측치 길이 구하기

summarise(hflights_df, cnt = n(), delay = mean(AirTime, na.rm = TRUE))
# cnt delay
# <int> <dbl>
#   1 227496  108.
  • n()함수: 데이터 셋의 관측치 길이를 구하는 함수

 

 

ex ) 도착시간(AirTime)의 표준편차와 분산 계산

summarise(hflights_df, arrTimeSd = sd(ArrTime, na.rm = TRUE),
                   arrTimeVar = var(ArrTime, na.rm = T))

# arrTimeSd arrTimeVar
# <dbl>      <dbl>
#   1      472.    223163.

 

 

 

 

(8) 집단변수 대상 그룹화

  • 데이터 셋 내 범주형 컬럼을 대상으로 그룹화하는 group_by()함수 사용
  • group_by(dataframe, 집단변수) group_by
  • 함수에 객체를 지정하면 컬럼별로 분리한다.

ex ) 컬럼의 집단별 평균 요약 통계량

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% group_by(class) %>% summarise(mean_math = mean(math))
# class mean_math
#   <int>     <dbl>
# 1     1      66.7
# 2     2      57.5
# 3     3      70  
  • 컬럼의 집단별 평균에 대한 요약 통계량을 반환한다.
  • group_by 함수는 인자로 범주형 변수가 포함된 컬럼명을 인자로 받아 요약 통계량을 계산

 

 

ex ) 컬럼의 집단별 다중 요약 통계량

library(dplyr)
csvgrade <- read.csv("C:/grade_csv.csv")
csvgrade %>% group_by(class) %>% summarise(mean_math = mean(math), sum_math
                                           = sum(math), median_math = median(math))
# class mean_math sum_math median_math
#   <int>     <dbl>    <int>       <dbl>
# 1     1      66.7      200          60
# 2     2      57.5      230          60
# 3     3      70        210          80
  • 컬럼의 집단별 다중 요약 통계량을 반환한다

 

ex ) 집단변수를 이용하여 그룹화

species <- group_by(iris, Species)
str(species)
# grouped_df [150 x 5] (S3: grouped_df/tbl_df/tbl/data.frame)
# $ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# - attr(*, "groups")= tibble [3 x 2] (S3: tbl_df/tbl/data.frame)
# ..$ Species: Factor w/ 3 levels "setosa","versicolor",..: 1 2 3
# ..$ .rows  : list<int> [1:3] 
# .. ..$ : int [1:50] 1 2 3 4 5 6 7 8 9 10 ...
# .. ..$ : int [1:50] 51 52 53 54 55 56 57 58 59 60 ...
# .. ..$ : int [1:50] 101 102 103 104 105 106 107 108 109 110 ...
# .. ..@ ptype: int(0) 
# ..- attr(*, ".drop")= logi TRUE

species
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#         <dbl>       <dbl>        <dbl>       <dbl> <fct>  
# 1          5.1         3.5          1.4         0.2 setosa 
# 2          4.9         3            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           3.6          1.4         0.2 setosa 
# 6          5.4         3.9          1.7         0.4 setosa 
# 7          4.6         3.4          1.4         0.3 setosa 
# 8          5           3.4          1.5         0.2 setosa 
# 9          4.4         2.9          1.4         0.2 setosa 
# 10          4.9         3.1          1.5         0.1 setosa 

 

 

 

 

 

반응형

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

[ R ]reshape2 패키지 활용  (0) 2022.11.20
[ R ] dplyr 패키지 활용 #3  (0) 2022.11.19
[ R ] dplyr 패키지 활용 #1  (0) 2022.11.19
[ R ] 주요 내장함수  (0) 2022.11.18
[ R ] 함수의 정의  (0) 2022.11.18
Comments