본문 바로가기

R데이터전처리

[R-전처리] 데이터 프레임에서 조건에 맞는 행 추출(dplyr filter)

Raw data에서 특정 조건을 만족하는 레코드(행)만 추출하려고 한다.

 

 

 

< 실습 데이터 >

서울시 2020년 2월 한 달간 역별 승하차 데이터

 

subway_202002.csv
0.65MB

 

# data load
setwd("C:\\Users\\user\\Desktop\\data")
subway <- read.csv("subway_202002.csv", header=T, stringsAsFactor=F)

str(subway)
View(subway)

 

 

 

 

< 인덱싱 방식을 이용한 추출 >

인덱싱 방식에 데이터명[행 조건, ] 방식으로 추출하는 방법이 있다.

 

View(subway[subway$노선명 == '공항철도 1호선', ])

View(subway[subway$노선명 == '공항철도 1호선' & subway$사용일자 == 20200215, ])

 

 

 

인덱싱 방식의 추출은 간편하긴 하지만, NA값을 필터링 하지 못한다는 큰 단점이 있다.

또한 모든 행을 다 True/False 방식으로 검사하며 조건에 맞는 행을 찾아내기 때문에 데이터 양이 많아지면 속도가 현저히 느려진다.

 

 

 

 

< which 함수를 이용한 추출 >

which 함수는 조건을 만족하는 위치 값만 출력한다.

인덱스방식은 모든 행을 다 True/False로 전환하여 출력하지만, which는 True인 레코드만 다루므로 인덱싱 방식보다는 빠르다.

 

두 개 이상의 조건을 걸어줄 때는 intersect (교집합, and 조건), Union (합집합, or 조건) 을 사용한다.

 

View(
subway[which(subway$노선명 == '수인선'), ] )



View(
subway[
  intersect(which(subway$노선명 == '수인선'),
            which(subway$사용일자 == 20200215)),
])

 

 

 

 

 

 

< dplyr 패키지를 이용한 추출 >

dplyr의 filter 함수를 이용하면 조건에 맞는 행을 추출할 수 있다.

 

library(dplyr) # 라이브러리 구동

subway %>%
  filter(노선명 == '2호선' & 사용일자 == 20200203) %>%
  View()

 

 

 

 

연속되는 사이의 범위 값을 조건으로 걸 때는 and, or 연산 대신 between을 사용할 수도 있다.

between(컬럼명, 시작구간조건, 끝구간조건)

 

subway %>%
  filter(between(사용일자,
                     20200224, 20200225) 
         & 노선명 == '경춘선') %>%
  View()