본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[Rstudio tidyverse] dplyr 패키지 (filter, select, mutate)

by Vitaminymc 2023. 10. 7.
반응형

dplyr 패키지 (filter, select, mutate)

dplyr 패키지는 R에서 데이터 프레임을 다루는 작업을 효율적으로 수행하기 위한 패키지로, 데이터 필터링, 정렬, 그룹화, 요약, 변환 등 다양한 작업을 할 수 있다.

데이터 분석 초기에 많이 사용되며, 데이터를  요약하고 살펴보기 위한 용도와 단계별 분석을 위해서 가공하기 위해서 많이 사용되며, 직관적인 문법을 제공한다.


penguins 데이터 세트는 palmerpenguins 패키지에 포함되어 있으며, 펭귄 종류에 대한 정보와 크기, 무게 등의 데이터가 포함되어 있음

install.packages('palmerpenguins')  #팔머 펭귄 Dataset이 포함된 패키지
library(palmerpenguins)
data("penguins")  #Dataset 불러오기

str(penguins)  #Dataset 구성 확인
> str(penguins)  #Dataset 구성 확인
tibble [344 × 8] (S3: tbl_df/tbl/data.frame)
 $ species          : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ island           : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ bill_length_mm   : num [1:344] 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
 $ bill_depth_mm    : num [1:344] 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
 $ flipper_length_mm: int [1:344] 181 186 195 NA 193 190 181 195 193 190 ...
 $ body_mass_g      : int [1:344] 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
 $ sex              : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ...
 $ year             : int [1:344] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
table(penguins$species)
> table(penguins$species)

   Adelie Chinstrap    Gentoo 
      152            68           124 

filter : 특정 조건을 만족하는 데이터 선택

조건 수식 조건 내용
== 왼쪽 값과 오른쪽 값이 동일한지 확인 (Equal to)
!= 왼쪽 값과 오른쪽 값이 다른지 확인 ((Not Equal to)
> 왼쪽 값이 오른쪽 값보다 큰지 확인 (Greater than)
>= 왼쪽 값이 오른쪽 값보다 크거나 같은지 확인 (Greater than or Equal to)
< 왼쪽 값이 오른쪽 값보다 작은지 확인  (Less than)
<= 왼쪽 값이 오른쪽 값보다 작거나 같은지 확인 (Less than or Equal to)
& 두 개의 조건이 모두 참 (만족)
| 두 개의 조건 중 하나 이상 참 (만족)  [shift ] + [ ]
%in% 벡터와 데이터 프레임의 열에서 원소의 포함 여부를 확인
%notin% 벡터와 데이터 프레임의 열에서 원소의 미포함 여부를 확인 
mefa4 패키지 설치 필요 
!is.na 결측값 제거

 

특정 문자열 데이터를 필터링

penguins %>%
  filter (species == "Chinstrap") #종(species)이 Chinstrap인 데이터

 

복수의 문자열 데이터를 필터링

penguins %>%
  filter (species %in% c("Chinstrap", "Gentoo") #종(species)이 Chinstrap과 Gentoo인 데이터

 

숫자 범위로 필터링 + 여러 조건 결합하기 (AND 조건)

penguins %>%
  filter (bill_length_mm >= 50 & bill_depth_mm >= 15 )  # bill_length_mm가 50이상이고 bill_depth_mm가 15이상인 데이터

 

숫자 범위로 필터링 + 여러 조건 결합하기 (OR 조건)

penguins %>%
  filter (flipper_length_mm >= 230 | flipper_length_mm <= 175) # flipper_length_mm가 230이상이거나 175이하인 데이터

 

결측값 제거 필터링 ( !is.na )

penguins %>%
  filter (!is.na(body_mass_g))

 

300x250

 

select : 특정 열(변수)을 선택

penguins %>%
  select (species, island, body_mass_g)

 

starts_with(), ends_with() : 열(변수) 이름이 특정 문자열로 시작하거나 끝나는 열 선택

penguins %>%
  select(starts_with('bill'))

 

penguins %>%
  select(ends_with('mm'))

contains() :  특정 문자열을 담고 있는 열(변수) 선택

penguins %>%
  select(contains('length'))

mutate : 새로운 열(변수)을 생성하거나 기존 열을 변환

penguins %>%
  mutate (body_mass_kg = body_mass_g /1000)

 

Image source : https://dplyr.tidyverse.org/

 

파이프 연산자 ( |> 또는 %>% )

%>%는 [Ctrl] + [Shift] + [m] 을 누르면 스크립트 창에 입력된다.

R4.1.0 부터, 파이프 연산자가 %>% 에서 |>  로 변경되었다. 

|> 및 %>%는 대부분 동일하게 동작한다. (일부 차이점은 있다고 한다.)

%>%

# With parentheses:
letters %>% head()
> letters %>% head()
[1] "a" "b" "c" "d" "e" "f"
# Without parentheses:
letters %>% head
> letters %>% head
[1] "a" "b" "c" "d" "e" "f"

|> (native pipe)

# R 4.1.0: Make sure your parentheses are present:
letters |> head()
> letters |> head()
[1] "a" "b" "c" "d" "e" "f"
letters |> head
> letters |> head
Error in head : 
  The pipe operator requires a function call as RHS (<input>:1:12)

Reference : https://www.r-bloggers.com/2021/05/new-features-in-r-4-1-0/?fbclid=IwAR0KcJNkrPyQ2cT5LMKvBoOzuYoyxbDdkjd5toiTbmSLecZ_TjBRjGymWMU 

 

New features in R 4.1.0 | R-bloggers

R-4.1.0 is released! Rejoice! A new R release (v 4.1.0) is due on 18th May 2021. Typically most major R releases don’t contain that many new features, but this release does contain some interesting and important changes. This post summarises some of the

www.r-bloggers.com

%>%를 사용하면 다른 인수 없이 함수를 호출할 때 괄호를 삭제할 수 있으나, |>에는 항상 괄호가 필요하다.

1:3 %>% sum() 1:3 |> sum ()
> 1:3 %>% sum()
[1] 6
> 1:3 |> sum ()
[1] 6
1:3 %>% sum 1:3 |> sum
> 1:3 %>% sum
[1] 6
> 1:3 |> sum
Error in sum : 
  The pipe operator requires a function call as RHS (<input>:1:8)

Reference : https://stackoverflow.com/questions/67744604/what-does-pipe-greater-than-mean-in-r

 

728x90