본문 바로가기
R/데이터 전처리

[dplyr] R dplyr을 이용한 인덱싱 및 기능(select편)

by ssanalyst 2020. 10. 27.
728x90

안녕하세요. 오늘은 'dplyr' 패키지를 이용하여 인덱싱하는 방법과 다른 기능들에 대해 적어보도록 하겠습니다.

dplyr은 데이터 분석하시는 분들이 자주 사용하는 패키지입니다.

dplyr은 명령문이 직관적이며 여러 명령문을 한번에 작성하여 실행가능합니다.

dplyr은 pipe operator를 지원하며 이는 기본 R과의 차이점입니다.

pipe operator는 다음과 같은 모양을 가집니다. -------> %>%

명령문을 작성할때, 각 명령문 사이사이에 위의 %>% 명령어를 넣어서 R 명령문을 작성할 수 있습니다.

pipe operator를 사용한 명령어 예시는 아래와 같습니다.

 

iris %>% select(Sepal.Length, Petal.Length, Species) %>% filter(Species=='setosa')

 

일반적으로 pipe는 무언가를 연결해주는 것처럼 위의 pipe operator도 각 명령문을 이어준다고 생각하시면 됩니다.

위의 명령어를 자세하게 살펴보면,

iris 데이터에서 Sepal.Length, petal.Length, Species 변수만을 사용하며(select 함수),

추출한 세 변수 중에서 Species가 setosa인 데이터만 필터링(filter) 해주라는 명령어입니다.

앞의 함수의 결과가 pipe 다음의 함수에서 사용할 데이터가 되는 것입니다.

그럼 일단 'dplyr' 패키지를 설치하고 패키지를 열어보도록 합시다.

 

install.packages('dplyr') library(dplyr)

 

install.packages함수는 패키지를 설치해주는 함수이며, 괄호 안에는 원하는 패키지명을 ' ' 사이에 입력하면 됩니다.

그러면 자동으로 패키지를 설치해줍니다. R은 패키지를 설치했다고 해서 바로 사용할 수 없습니다.

설치 후에는 저렇게 library을 이용하여 패키지를 열어주셔야 사용가능합니다. 패키지는 R 프로그램을 매번 새로 열때마다 열어주셔야 합니다.

dplyr에서 자주 사용하는 함수에 대해 알아보겠습니다.

select 함수는 인덱싱 기능하는 함수이며 filter와 달리 원하는 column만 추출합니다.

filter 함수는 [ ] 인덱싱과 비슷한 기능을 하지만 NA값을 없애고 인덱싱 합니다.

arrange 함수는 정렬해주는 함수이며 내림차순, 오름차순 정렬과 기준값 뿐만 아니라 기준값을 기준으로 정렬하고 난 다음 다른 변수들도 정렬해줍니다(이때 기준값은 내림차순으로 정렬해도 다른 값들은 오름차순으로 정렬).

mutate 함수는 새로운 변수를 만드는 함수입니다.

summarize는 원하는 수치를 요약해주는 함수입니다.

그럼 이제 iris 파일을 이용해서 각 함수의 기능을 살펴보도록 하겠습니다.


select 함수

 

> iris
    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
7            4.6         3.4          1.4         0.3     setosa
8            5.0         3.4          1.5         0.2     setosa
9            4.4         2.9          1.4         0.2     setosa

iris는 5개의 변수를 가집니다. select 함수를 사용하여 원하는 변수만 선별하도록 하겠습니다.

 

> iris %>% select(Sepal.Length, Petal.Length, Species)
    Sepal.Length Petal.Length    Species
1            5.1          1.4     setosa
2            4.9          1.4     setosa
3            4.7          1.3     setosa
4            4.6          1.5     setosa
5            5.0          1.4     setosa

> iris %>% select(1,3,5)
    Sepal.Length Petal.Length    Species
1            5.1          1.4     setosa
2            4.9          1.4     setosa
3            4.7          1.3     setosa
4            4.6          1.5     setosa
5            5.0          1.4     setosa

> iris %>% select(-c(1,3,5))
    Sepal.Width Petal.Width
1           3.5         0.2
2           3.0         0.2
3           3.2         0.2
4           3.1         0.2
5           3.6         0.2

select 함수를 사용하여 세 가지 변수를 추출하였습니다.

먼저 원하는 변수 명을 select 함수 괄호 안에 적는 방법이 있으며, 원하는 column이 몇 번째인지를 숫자로 입력해주는 방법으로도 추출이 가능합니다.

마지막으로는 - 를 사용한 방법인데요. 이전 인덱싱 포스팅에서 -는 괄호 안에 있는 column(변수)를 제외한 나머지 column을 추출할 때 사용하는 명령어라고 했습니다.

마찬가지로 select함수에서도 위와 같이 -를 사용하여 원치않는 column을 제한 나머지 column을 선별할 수 있습니다.

물론 :(콜론) 도 사용가능합니다.

이번 포스팅에서 위에 설명해놓은 filter, arrange, summarize 등을 다 포스팅하려고 했는데, 그러면 길이 너무 길어질거 같아 각 함수별로 포스팅 하도록 하겠습니다.

마지막으로 한 가지 더 추가하고 싶은 것이 있습니다. dplyr 패키지의 함수들 역시 pipe operator를 쓰지않고 사용할 수 있습니다.

select(iris, 1,3,5) 
select(iris, c(1,3,5))

위의 명령어가 pipe operator를 사용하지 않은 방식입니다. 먼저 사용할 데이터 명을 적어주시고 ,(콤마) 다음에 원하는 변수명이나 해당 열번호를 적어주시면 됩니다.

위의 두 명령어 모두 같은 결과를 산출해줍니다.

 

그런데 저렇게 사용가능한데 왜 pipe operator를 사용하나?? 에 대한 물음이 생길 수 있습니다.

그에 대한 답변은 아래 명령어를 보여드리면서 애기하도록 하겠습니다.

> data <- select(iris, 1,3,5)
> data <- filter(data, Species=='setosa')
> data
   Sepal.Length Petal.Length Species
1           5.1          1.4  setosa
2           4.9          1.4  setosa
3           4.7          1.3  setosa
4           4.6          1.5  setosa
5           5.0          1.4  setosa

--------------------------------------------------------------------------------------------------------------------
iris %>% select(Sepal.Length, Petal.Length, Species) %>% filter(Species=='setosa')

> data <- iris
> data %<>% select(Sepal.Length, Petal.Length, Species) %>% filter(Species=='setosa')
> data
   Sepal.Length Petal.Length Species
1           5.1          1.4  setosa
2           4.9          1.4  setosa
3           4.7          1.3  setosa
4           4.6          1.5  setosa
5           5.0          1.4  setosa

위의 점선 위에 명령어를 보시면 변수를 추출하고 그 중에서 원하는 데이터를 얻기위해 필터링을 하는데 두 줄의 명령어를 작성해야 합니다.

사용할 함수와 입력할 명령어가 짧으면 상관이 없지만, 길어진다면 저렇게 두 줄, 세 줄로 나누어서 입력하는 것은 비효율적이며 불편합니다.

하지만 pipe operator를 사용한다면 저렇게 한번에 명령어를 처리할 수 있습니다. 그리고 pipe의 장점은 사용자가 머리 속에서 생각하고 있는 데이터 정렬의 흐름대로 명령어를 작성 가능하게 해준다는 점입니다.

심지어 'magrittr' 패키지를 설치하면 ' %<>% ' 를 통해 더 간단히 작성 가능합니다.

%<>%의 우측에는 기존의 data 자료가 넘어가서 select와 filter함수에 사용되고, %<>%의 우측의 명령어의 최종 결과 값이 다시 data로 넘어갑니다.

> data <- select(iris, 1,3,5)
> data <- filter(data, Species=='setosa')

위의 두 줄을 한 줄로 줄여서 실행한 것입니다. 이렇게 pipe operator는 직관적이며 사용하기 편리합니다.

이번 포스팅에서는 selcet함수만을 다루고 나머지 함수들은 다음 포스팅에서 다루도록 하겠습니다.

감사합니다 :)

 

728x90

'R > 데이터 전처리' 카테고리의 다른 글

[Mplus/R] 엑셀 csv로 변환 / 자료준비  (0) 2020.12.07
[R] dplyr의 filter, arrange 사용법  (0) 2020.12.06
분석 의뢰  (0) 2019.10.14

댓글