[사용 함수]

패키지명

함수명

설명

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

+ Recent posts