데이터 정렬(arrage) 및 조건에 맞는 데이터 추출(filter)하기
library(dplyr)
sales <- read.csv('sales.csv', stringsAsFactors = F,
fileEncoding = 'UTF-8')
colnames(sales) <- c('city', 'district', 'gender', 'sales.nm', 'sales.cd', 'ymd', 'sales.num')
colnames
colnames
로 데이터 column 확인하기
colnames(sales)
[1] "city" "district" "gender" "sales.nm" "sales.cd" "ymd" [7] "sales.num"
판매건수 오름차순 정렬
arrange
sales %>% arrange(sales.num)
로 오름차순으로 정렬한다. sales.num
(판매건수)가 낮은 순부터 오름차순으로 출력이 된다.
sales %>% arrange(sales.num) %>% head
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 여 카페베타 12AA01 20140106 1 2 서울특별시 강남구 남 카페베타 12AA01 20140106 1 3 서울특별시 강남구 여 원조백반 100202 20140121 1 4 서울특별시 강남구 남 원조백반 100202 20140121 1 5 서울특별시 강남구 여 전주비빔 100203 20140126 1 6 서울특별시 강남구 남 전주비빔 100203 20140126 1
판매건수 내림차순 정렬
desc
arrange
의 옵션중 desc
을 사용한다. desc
는 decreasing, 감소하다는 뜻이다. sales.num
(판매건수)가 높은 순부터 내림차순으로 출력이 된다.
sales %>% arrange(desc(sales.num)) %>% head
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 여 원조한식 100201 20140116 500 2 서울특별시 강남구 여 스탑버스 12AA02 20140215 500 3 서울특별시 강남구 남 스탑버스 12AA02 20140215 500 4 서울특별시 강남구 NA 베타문구 110002 20140411 500 5 서울특별시 강남구 여 스탑버스 12AA02 20140411 500 6 서울특별시 강남구 남 베타문구 110002 20140411 500
데이터 확인하기
head
head
를 이용해서 6개만 탐색적으로 데이터를 확인한다.
sales %>% arrange(desc(sales.num)) %>% head
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 여 원조한식 100201 20140116 500 2 서울특별시 강남구 여 스탑버스 12AA02 20140215 500 3 서울특별시 강남구 남 스탑버스 12AA02 20140215 500 4 서울특별시 강남구 NA 베타문구 110002 20140411 500 5 서울특별시 강남구 여 스탑버스 12AA02 20140411 500 6 서울특별시 강남구 남 베타문구 110002 20140411 500
slice
slice
를 통해 원하는 만큼의 숫자를 뽑아서 볼 수 있다.
head
대신 slice(1:1000)
를 이용하여 1000개의 데이터를 확인한다.
sales %>% arrange(desc(sales.num)) %>% slice(1:1000)
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 여 원조한식 100201 20140116 500 2 서울특별시 강남구 여 스탑버스 12AA02 20140215 500 3 서울특별시 강남구 남 스탑버스 12AA02 20140215 500 4 서울특별시 강남구 NA 베타문구 110002 20140411 500 ...
판매건수 상위 10개
내림차순 정렬후, slice
를 이용해서 1부터 10까지 자른후 새롭게 만든 sales.top10
변수에 저장해서 확인한다.
sales.top10 <- sales %>% arrange(desc(sales.num)) %>% slice(1:10)
sales.top10
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 여 원조한식 100201 20140116 500 2 서울특별시 강남구 여 스탑버스 12AA02 20140215 500 3 서울특별시 강남구 남 스탑버스 12AA02 20140215 500 4 서울특별시 강남구 NA 베타문구 110002 20140411 500 5 서울특별시 강남구 여 스탑버스 12AA02 20140411 500 6 서울특별시 강남구 남 베타문구 110002 20140411 500 7 서울특별시 강남구 남 스탑버스 12AA02 20140411 500 8 서울특별시 강남구 여 원조백반 100202 20140715 500 9 서울특별시 강남구 남 원조백반 100202 20140715 500 10 서울특별시 강남구 남 원조백반 100202 20140730 500
arrange
arrange
로 여러 개의 변수를 동시에 정렬하기.
성별, 판매건수 변수 정렬
성별, 판매건수에 대해서 정렬한다. 기존에는 남녀가 섞여있는데, 성별에 대해서 먼저 정렬이되면 한글 순으로 정렬되기 때문에 남자가 여자보다 먼저 정렬이 되어 출력이 된다. 그리고 2차적으로 성별안에서 다시 판매건수를 가지고 오름차순 정렬이 된다.
sales %>% arrange(gender, sales.num) %>% slice(1:10)
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 남 카페베타 12AA01 20140106 1 2 서울특별시 강남구 남 원조백반 100202 20140121 1 3 서울특별시 강남구 남 전주비빔 100203 20140126 1 4 서울특별시 강남구 남 원조한식 100201 20140225 1 5 서울특별시 강남구 남 카페베타 12AA01 20140302 1 6 서울특별시 강남구 남 키즈랜드 100101 20140307 1 7 서울특별시 강남구 남 카페베타 12AA01 20140526 1 8 서울특별시 강남구 남 레스탑 110001 20140804 1 9 서울특별시 강남구 남 레스탑 110001 20140913 1 10 서울특별시 강남구 남 전주비빔 100203 20141102 1
구, 판매건수 변수 정렬
desc(district), desc(sales.num)
으로 구와 판매건수를 내림차순으로 정렬한다. 정렬 결과를 확인하면 중랑구
부터 정렬이 되고, 2차적으로 구 안에서 판매건수가 높은것부터 낮은순으로 내림차순 정렬이 된다.
sales %>% arrange(desc(district), desc(sales.num)) %>% slice(1:100)
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 중랑구 여 카페베타 12AA01 20140115 500 2 서울특별시 중랑구 남 @ @ 20140115 500 3 서울특별시 중랑구 남 원조한식 100201 20140125 500 4 서울특별시 중랑구 여 원조한식 100201 20140125 500 ...
select
select
함수를 이용해 변수 선택을 한다.
sales %>% select(ymd) %>% head
ymd 1 20140101 2 20140101 3 20140101 4 20140101 5 20140101 6 20140101
seect(-)
select(-ymd)
을 이용해 ymd
변수는 제외 선택을 한다.
sales.del <- sales %>% select(-ymd)
sales.del %>% head
city district gender sales.nm sales.cd sales.num 1 서울특별시 강남구 남 스탑버스 12AA02 103 2 서울특별시 강남구 여 키즈랜드 100101 309 3 서울특별시 강남구 여 키즈랜드 100101 365 4 서울특별시 강남구 남 스탑버스 12AA02 421 5 서울특별시 강남구 여 스탑버스 12AA02 413 6 서울특별시 강남구 남 키즈랜드 100101 428
조건에 맞는 데이터 추출 다른 예시 - nrow, |, &
&
AND 조건을 이용해 성별이 남
이면서 여
인 데이터를 뽑는다.
sales %>% filter(gender == '남' & gender =='여')
city district gender sales.nm sales.cd ymd sales.num
|
OR 조건을 이용해 성별이 남
이거나 여
인 데이터를 뽑는다.
nrow
로 filter(gender == '남' | gender =='여')
에 해당하는 행 개개수를 확인한다.
sales %>% filter(gender == '남' | gender =='여') %>% nrow
[1] 236520
sales
전체 데이터 행의 개수를 확인한다. 성별에 NA
가 포함되어있기 때문에 남자 또는 여자로 필터한 데이터 행 개수 보다 필터를 안한 전체 행의 개수는 더 많다.
sales %>% nrow
[1] 262800
%in%
특정 값을 가지는 데이터만 뽑고 싶을 때, %in%
을 사용한다.
예
1부터 10을 변수 X
에 넣는다.
x = 1:10
x %in% c(5,6,7)
의 결과 5,6,7
에 해당하는 데이터는 TRUE
로 반환해준다.
x %in% c(5,6,7)
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
x %in% c(5,6,7)
을 X[]
로 감싸주면 5,6,7
이 출력된다.
x[x %in% c(5,6,7)]
[1] 5 6 7
데이터에 적용
sales.nm %in% c('스탑버스', '카페베타')
로 스탑버스
와 카페베타
업종만 뽑는다.
sales %>% filter(sales.nm %in% c('스탑버스', '카페베타')) %>% head
city district gender sales.nm sales.cd ymd sales.num 1 서울특별시 강남구 남 스탑버스 12AA02 20140101 103 2 서울특별시 강남구 남 스탑버스 12AA02 20140101 421 3 서울특별시 강남구 여 스탑버스 12AA02 20140101 413 4 서울특별시 강남구 남 카페베타 12AA01 20140101 88 5 서울특별시 강남구 여 카페베타 12AA01 20140101 117 6 서울특별시 강남구 남 스탑버스 12AA02 20140101 267