[사용 함수]
패키지명 | 함수명 | 설명 |
dplyr | filter | 조건에 맞는 행 추출 |
dplyr | slice | 부분 행 데이터 잘라서 보여줌 |
dplyr | arrange | 데이터 정렬 함수, sort보다 복잡한 조건을 간단하게 사용 가능 |
dplyr | select | 선택한 열만 추출 |
dplyr | distinct | 중복제거하고 유일한 값만 가져옴 |
dplyr | mutate | 파생변수(열) 생성 |
dplyr | summarise | 해당 열에 함수적용한 값을 data.frame형태로 반환 |
dplyr | %>% | 매우 짧은 코드로 간편하게 대규모 데이터를 분석가능 사용데이터 %>% 함수() %>% 함수() ... 형태로 계속 연결 |
dplyr | group_by() | 데이터를 기준별로 그룹화 해주는 함수 |
| signif | 유효숫자를 제외한 나머지 반올림 시켜서 0으로 만들어줌 |
| unique | 중복제거하고 유일한 값만 가져옴 |
[dplyr 패키지]
R base에서 제공하는 apply계열 함수를 확장한 패키지로 plyr패키지의 업그레이드 버전
data.frame객체의 데이터를 다루기 쉽게 도와주는 패키지이다.
ggplot2패키지와 함께 가장 널리 이용되는 패키지다.
[filter() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | > ## dplyr 패키지 > library(dplyr) > Sales<-read.csv("Sales.csv") > head(Sales) Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue b F 24922 3 1 Wed c M 8835 4 1 Thu d F 13720 5 1 Fri e M 10826 6 1 Sat f F 43319 > > # filter() 함수 > # 조건에 맞는 행 추출 > filter(Sales, Month==1,Store=="a") # and를 ,로 연결 가능 Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue a F 33882 3 1 Wed a M 34036 4 1 Thu a F 29043 5 1 Fri a M 14966 6 1 Sat a F 2688 7 1 Sun a M 24912 8 1 Mon a F 21576 9 1 Tue a M 30295 10 1 Wed a F 25963 11 1 Thu a M 33314 12 1 Fri a F 12583 13 1 Sat a M 4463 14 1 Sun a F 5861 > filter(Sales, Month==1&Store=="a") # 추천하지 않는 방식 Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue a F 33882 3 1 Wed a M 34036 4 1 Thu a F 29043 5 1 Fri a M 14966 6 1 Sat a F 2688 7 1 Sun a M 24912 8 1 Mon a F 21576 9 1 Tue a M 30295 10 1 Wed a F 25963 11 1 Thu a M 33314 12 1 Fri a F 12583 13 1 Sat a M 4463 14 1 Sun a F 5861 > filter(Sales, Month==1 | Month==2) Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue b F 24922 3 1 Wed c M 8835 4 1 Thu d F 13720 5 1 Fri e M 10826 6 1 Sat f F 43319 7 1 Sun g M 2471 8 1 Mon h F 10457 9 1 Tue i M 17081 10 1 Wed j F 18583 ... | cs |
[slice() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | > # slice() 함수 > # 부분 행 데이터 잘라서 보여줌 > slice(Sales, 1:10) Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue b F 24922 3 1 Wed c M 8835 4 1 Thu d F 13720 5 1 Fri e M 10826 6 1 Sat f F 43319 7 1 Sun g M 2471 8 1 Mon h F 10457 9 1 Tue i M 17081 10 1 Wed j F 18583 > slice(Sales,3:8) # 3~8행까지 잘라서 보여줌 Month Day Store Gender Sales_Freq 1 1 Wed c M 8835 2 1 Thu d F 13720 3 1 Fri e M 10826 4 1 Sat f F 43319 5 1 Sun g M 2471 6 1 Mon h F 10457 | cs |
[arrange() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | > # arrange() 함수 > # 데이터 정렬 함수, sort보다 복잡한 조건을 간단하게 사용 가능 > arrange(Sales,Store,Month,Day) # Store 오름차순, 다음 Month 오름차, Day 오름차순 Month Day Store Gender Sales_Freq 1 1 Fri a M 14966 2 1 Fri a F 12583 3 1 Mon a M 21451 4 1 Mon a F 21576 5 1 Sat a F 2688 6 1 Sat a M 4463 7 1 Sun a M 24912 8 1 Sun a F 5861 9 1 Thu a F 29043 10 1 Thu a M 33314 11 1 Tue a F 33882 ... > slice(arrange(Sales,Store,Month,Day),1:50) # 정렬 후 부분 행 자르기 Month Day Store Gender Sales_Freq 1 1 Fri a M 14966 2 1 Fri a F 12583 3 1 Mon a M 21451 4 1 Mon a F 21576 5 1 Sat a F 2688 6 1 Sat a M 4463 7 1 Sun a M 24912 8 1 Sun a F 5861 9 1 Thu a F 29043 10 1 Thu a M 33314 11 1 Tue a F 33882 12 1 Tue a M 30295 13 1 Wed a M 34036 14 1 Wed a F 25963 15 2 Fri a M 42184 ... > slice(arrange(Sales,Store,desc(Month),Day),1:50) # desc 로 내림차순 지정 Month Day Store Gender Sales_Freq 1 12 Fri a M 49936 2 12 Fri a F 49291 3 12 Mon a M 37844 4 12 Mon a F 25433 5 12 Sat a F 31974 6 12 Sat a M 12363 7 12 Sun a M 22876 8 12 Sun a F 22499 9 12 Thu a F 283 10 12 Thu a M 42415 11 12 Tue a F 8778 12 12 Tue a M 30690 13 12 Wed a M 48851 14 12 Wed a F 2950 ... | cs |
[select() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | > # select() 함수 > # 선택한 열만 추출 > select(Sales,Store,Month,Day,Sales_Freq) # 선택된 열만 반환 Store Month Day Sales_Freq 1 a 1 Mon 21451 2 b 1 Tue 24922 3 c 1 Wed 8835 4 d 1 Thu 13720 5 e 1 Fri 10826 6 f 1 Sat 43319 7 g 1 Sun 2471 8 h 1 Mon 10457 9 i 1 Tue 17081 ... [ reached 'max' / getOption("max.print") -- omitted 2270 rows ] > select(Sales,names(Sales)) # 모든 열 추출 Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue b F 24922 3 1 Wed c M 8835 4 1 Thu d F 13720 5 1 Fri e M 10826 6 1 Sat f F 43319 7 1 Sun g M 2471 8 1 Mon h F 10457 9 1 Tue i M 17081 10 1 Wed j F 18583 11 1 Thu k M 6833 12 1 Fri l F 33803 13 1 Sat m M 2265 14 1 Sun n F 32637 15 1 Mon o M 49704 16 1 Tue a F 33882 17 1 Wed b M 45928 18 1 Thu c F 23123 19 1 Fri d M 28571 20 1 Sat e F 22597 21 1 Sun f M 8386 22 1 Mon g F 3414 23 1 Tue h M 44846 24 1 Wed i F 13692 25 1 Thu j M 46510 ... [ reached 'max' / getOption("max.print") -- omitted 2320 rows ] > > slice(select(Sales,Store,Month,Day,Sales_Freq), 1:50) Store Month Day Sales_Freq 1 a 1 Mon 21451 2 b 1 Tue 24922 3 c 1 Wed 8835 4 d 1 Thu 13720 5 e 1 Fri 10826 6 f 1 Sat 43319 7 g 1 Sun 2471 8 h 1 Mon 10457 9 i 1 Tue 17081 10 j 1 Wed 18583 11 k 1 Thu 6833 12 l 1 Fri 33803 13 m 1 Sat 2265 14 n 1 Sun 32637 15 o 1 Mon 49704 ... > slice(select(Sales,-Gender), 1:50) # gender열 만 제외 Month Day Store Sales_Freq 1 1 Mon a 21451 2 1 Tue b 24922 3 1 Wed c 8835 4 1 Thu d 13720 5 1 Fri e 10826 6 1 Sat f 43319 7 1 Sun g 2471 8 1 Mon h 10457 9 1 Tue i 17081 10 1 Wed j 18583 11 1 Thu k 6833 12 1 Fri l 33803 13 1 Sat m 2265 ... | cs |
[distinct() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | > # distinct() 함수 > # 중복제거하고 유일한 값만 가져옴 > distinct(select(Sales,Store)) #Store열에서 중복제거한 유일한 데이터만 반환 Store 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j 11 k 12 l 13 m 14 n 15 o > distinct(select(Sales,Store,Month)) # Store와 Month조합으로 중복제거 유일한 데이터만 반환 Store Month 1 a 1 2 b 1 3 c 1 4 d 1 5 e 1 6 f 1 7 g 1 8 h 1 9 i 1 10 j 1 11 k 1 12 l 1 13 m 1 14 n 1 15 o 1 ... > unique(select(Sales,Store)) # rbase에서 같은 기능이지만, dpylr이 속도가 더 빠르다. Store 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j 11 k 12 l 13 m 14 n 15 o | cs |
[mutate() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | > # mutate()함수 > # 파생변수(열) 생성 > mutate(Sales,New_Freq=signif(Sales_Freq, digits=3)) # 파생 변수 생성 Month Day Store Gender Sales_Freq New_Freq 1 1 Mon a M 21451 21500 2 1 Tue b F 24922 24900 3 1 Wed c M 8835 8840 4 1 Thu d F 13720 13700 5 1 Fri e M 10826 10800 6 1 Sat f F 43319 43300 7 1 Sun g M 2471 2470 8 1 Mon h F 10457 10500 9 1 Tue i M 17081 17100 10 1 Wed j F 18583 18600 11 1 Thu k M 6833 6830 12 1 Fri l F 33803 33800 ... [ reached 'max' / getOption("max.print") -- omitted 2354 rows ] > # signif() 유효숫자 앞에서 3개 남기고 나머지는 반올림 시켜서 0으로 만들어줌 | cs |
[summarise() 함수]
1 2 3 4 5 6 7 8 9 10 11 | > # summarise() 함수 > # 해당 열에 함수적용한 값을 data.frame형태로 반환 > summarise(Sales,mean(Sales_Freq)) #summarize(미국식 영어)도 가능! mean(Sales_Freq) 1 24552.9 > summarize(Sales,Sales_Mean=mean(Sales_Freq)) Sales_Mean 1 24552.9 > summarise(Sales,Max=max(Sales_Freq),Min=min(Sales_Freq),Mean=mean(Sales_Freq)) Max Min Mean 1 49976 9 24552.9 | cs |
[chain "%>%" 사용]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | > ## chain "%>%" 사용 > # 매우 짧은 코드로 간편하게 대규모 데이터를 분석가능 > # 사용데이터 %>% 함수() %>% 함수() ... 형태로 계속 연결 > Sales %>% filter(Store=="a") #Sales 데이터셋에서 a점포자료만 추출 Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue a F 33882 3 1 Wed a M 34036 4 1 Thu a F 29043 5 1 Fri a M 14966 6 1 Sat a F 2688 7 1 Sun a M 24912 8 1 Mon a F 21576 9 1 Tue a M 30295 10 1 Wed a F 25963 11 1 Thu a M 33314 12 1 Fri a F 12583 13 1 Sat a M 4463 14 1 Sun a F 5861 15 2 Mon a M 43421 16 2 Tue a F 9545 17 2 Wed a M 3312 ... > # filter(Sales, Store=="a") 함수에서 쓰인 데이터를 앞으로 빼서 chain 사용 > > Sales %>% + filter(Store=="a") %>% + filter(Month==1) # a점포 자료에서 %>% 1월자료만 추출 Month Day Store Gender Sales_Freq 1 1 Mon a M 21451 2 1 Tue a F 33882 3 1 Wed a M 34036 4 1 Thu a F 29043 5 1 Fri a M 14966 6 1 Sat a F 2688 7 1 Sun a M 24912 8 1 Mon a F 21576 9 1 Tue a M 30295 10 1 Wed a F 25963 11 1 Thu a M 33314 12 1 Fri a F 12583 13 1 Sat a M 4463 14 1 Sun a F 5861 > > # 1월에 대한 평균과 합을 쉽게 구할 수 있다. > Sales %>% + filter(Month==1) %>% # 1월자료만 추출 + summarise(Jan_Mean=mean(Sales_Freq),Jan_Sum=sum(Sales_Freq)) # 추출된 데이터에 함수 적용 Jan_Mean Jan_Sum 1 24347.91 5113061 > > # Store "a"와 1월의 평균과 합을 구하기 > Sales %>% + filter(Store=="a") %>% + filter(Month==1) %>% + summarise(Jan_Mean=mean(Sales_Freq),Jan_Sum=sum(Sales_Freq)) Jan_Mean Jan_Sum 1 21073.79 295033 | cs |
[group_by() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | > # group_by() 함수 > # 데이터를 기준별로 그룹화 해주는 함수 > # 매 월별로 평균과 합산을 구하기 > Sales %>% + group_by(Month) %>% # 월별로 그룹화 + summarise(Mon_Mean=mean(Sales_Freq),Mon_Sum=sum(Sales_Freq)) # A tibble: 12 x 3 Month Mon_Mean Mon_Sum <int> <dbl> <int> 1 1 24348. 5113061 2 2 25708. 5398763 3 3 25529. 5361149 4 4 25248. 5302072 5 5 23155. 4862531 6 6 23619. 4960049 7 7 25220. 5296216 8 8 24482. 5141295 9 9 23920. 5023240 10 10 24190. 5079962 11 11 24924. 5234010 12 12 24290. 5100962 > > # 매 월별, 성별로 평균과 합산 구하기 > Sales %>% + group_by(Month,Gender) %>% # 월, 성별 기준으로 그룹화 + summarise(MonGen_Mean=mean(Sales_Freq),MonGen_Sum=sum(Sales_Freq)) #매월/성별 평균 및 합을 구하여라! # A tibble: 24 x 4 # Groups: Month [12] Month Gender MonGen_Mean MonGen_Sum <int> <fct> <dbl> <int> 1 1 F 25288. 2655256 2 1 M 23408. 2457805 3 2 F 26387. 2770638 4 2 M 25030. 2628125 5 3 F 24644. 2587641 6 3 M 26414. 2773508 7 4 F 26278. 2759156 8 4 M 24218. 2542916 9 5 F 23556. 2473427 10 5 M 22753. 2389104 # ... with 14 more rows | cs |
출처 - 경영프로그래밍 강의 자료 (양성병 교수님)
'IT,인터넷 관련 학습 > R언어 학습' 카테고리의 다른 글
[R] 정규표현식(regex) (2) | 2019.05.12 |
---|---|
[R] stringr 패키지 (0) | 2019.05.12 |
[R] 함수 II (0) | 2019.05.12 |
[R] 함수 I (0) | 2019.05.12 |
[R] 데이터 입력 및 출력 (0) | 2019.05.12 |