강의영상

- (1/4) 중간고사 대비 설명 (1)

- (2/4) 중간고사 대비 설명 (2)

- (3/4) 백터/매트릭스의 결합

- (4/4) 매트릭스 원소선택, 벡터관련 연산, 매트릭스 관련연산, 티블(데이터프레임)

%>%

- tidyverse중 하나의 dplyr의 기능

library(dplyr)

- 예시1

f<-function(x) x+2
f(2)
[1] 4
2 %>% f
[1] 4

- 예시2

f<-function(x,y) x**2+y
f(2,3)
[1] 7
2 %>% f(3)
[1] 7
3 %>% f(2)
[1] 11

- 포인트: 함수의 첫번째 입력이 %>% 의 왼쪽의 결과로 생각한다.

  • 하나의 입력만 받는 함수라면 함수이름만 쓸 수 있다!
  • 첫입력을 생략한다는 것이 포인트!

두 개 이상의 벡터, 행렬을 결합

벡터의 결합

- 예제1

x<-c(1,2,3)
y<-c(1,2,3,4)
x
[1] 1 2 3
y
[1] 1 2 3 4
c(x,y)
[1] 1 2 3 1 2 3 4
c(y,x)
[1] 1 2 3 4 1 2 3
c(x,2,2,2,y)
 [1] 1 2 3 2 2 2 1 2 3 4
  • c는 사실 결합하라라는 의미를 가짐

- 예제2

x<-c(1,2,3) 
y<-c(4,4,4)
cbind(x,y)
     x y
[1,] 1 4
[2,] 2 4
[3,] 3 4

- 예제2-1

x<-c(1,2,3,4)
y<-c(1,2)
cbind(x,y)
     x y
[1,] 1 1
[2,] 2 2
[3,] 3 1
[4,] 4 2

- 예제2-2

x<-c(1,2,3,4)
cbind(1,x)
       x
[1,] 1 1
[2,] 1 2
[3,] 1 3
[4,] 1 4

- 예제3

x<-c(1,2,3,4)
y<-c(1,2)
rbind(x,y)
  [,1] [,2] [,3] [,4]
x 1    2    3    4   
y 1    2    1    2   

- 예제4

x<-c(1,2,3)
y<-c(4,5)
cbind(1,c(x,y))
     [,1] [,2]
[1,] 1    1   
[2,] 1    2   
[3,] 1    3   
[4,] 1    4   
[5,] 1    5   

매트릭스의 결합

- 예제1

X<-rbind(1:5,6:10)
y<-c(1,2)
X
     [,1] [,2] [,3] [,4] [,5]
[1,] 1    2    3    4     5  
[2,] 6    7    8    9    10  
y
[1] 1 2
cbind(X,y,y,X)
                y y           
[1,] 1 2 3 4  5 1 1 1 2 3 4  5
[2,] 6 7 8 9 10 2 2 6 7 8 9 10

* 이름을 지우기 위해서는 아래와 같이 하면 된다.

XyyX= cbind(X,y,y,X)
colnames(XyyX)= NULL 
XyyX
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1    2    3    4     5   1    1    1    2    3     4      5   
[2,] 6    7    8    9    10   2    2    6    7    8     9     10   

- 예제2

X<-rbind(1:5,6:10)
rbind(X,1)
     [,1] [,2] [,3] [,4] [,5]
[1,] 1    2    3    4     5  
[2,] 6    7    8    9    10  
[3,] 1    1    1    1     1  

- 예제3

X <- rbind(1:5,6:10,1:5)
Y <- cbind(1:3,4:6,7:9)
X
     [,1] [,2] [,3] [,4] [,5]
[1,] 1    2    3    4     5  
[2,] 6    7    8    9    10  
[3,] 1    2    3    4     5  
Y
     [,1] [,2] [,3]
[1,] 1    4    7   
[2,] 2    5    8   
[3,] 3    6    9   
cbind(X,Y)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1    2    3    4     5   1    4    7   
[2,] 6    7    8    9    10   2    5    8   
[3,] 1    2    3    4     5   3    6    9   
rbind(X,Y)
Error in rbind(X, Y): number of columns of matrices must match (see arg 2)
Traceback:

1. rbind(X, Y)
  • 드디어 에러!!

매트릭스 원소 선택

X<-rbind(1:5,6:10,1:5)
X
     [,1] [,2] [,3] [,4] [,5]
[1,] 1    2    3    4     5  
[2,] 6    7    8    9    10  
[3,] 1    2    3    4     5  

- 예제1

X[,1]
[1] 1 6 1
  • 선택된 것은 자동으로 벡터화 된다.
x=X[,1]
x
[1] 1 6 1
dim(x)
NULL
dim(x)<-c(3,1)
x
     [,1]
[1,] 1   
[2,] 6   
[3,] 1   

- 예제2

X[,1:2]
     [,1] [,2]
[1,] 1    2   
[2,] 6    7   
[3,] 1    2   

- 예제3

X[,-1]
     [,1] [,2] [,3] [,4]
[1,] 2    3    4     5  
[2,] 7    8    9    10  
[3,] 2    3    4     5  

- 예제4

X[,-(1:2)]
     [,1] [,2] [,3]
[1,] 3    4     5  
[2,] 8    9    10  
[3,] 3    4     5  

- 예제5

X[1:2,]
     [,1] [,2] [,3] [,4] [,5]
[1,] 1    2    3    4     5  
[2,] 6    7    8    9    10  

- 예제6

X[1:2,1:3]
     [,1] [,2] [,3]
[1,] 1    2    3   
[2,] 6    7    8   

- 예제7

X[1:2, -1]
     [,1] [,2] [,3] [,4]
[1,] 2    3    4     5  
[2,] 7    8    9    10  

벡터관련 연산

- 예제1

c(1,2,5) %in% c(1,2,3,4)
[1]  TRUE  TRUE FALSE

- 예제2

union(c(1,1,2,2),c(2,3,4))
[1] 1 2 3 4

- 예제3

intersect(1:5,2:6)
[1] 2 3 4 5

- 예제4

x=1:5
x %*% x
     [,1]
[1,] 55  

- 예제5

x=1:5
x %o% x
     [,1] [,2] [,3] [,4] [,5]
[1,] 1     2    3    4    5  
[2,] 2     4    6    8   10  
[3,] 3     6    9   12   15  
[4,] 4     8   12   16   20  
[5,] 5    10   15   20   25  

매트릭스 관련연산

- 예제1: 트랜스포즈

A=cbind(c(1,2,3),c(4,5,6),c(7,8,9))
A
     [,1] [,2] [,3]
[1,] 1    4    7   
[2,] 2    5    8   
[3,] 3    6    9   
t(A)
     [,1] [,2] [,3]
[1,] 1    2    3   
[2,] 4    5    6   
[3,] 7    8    9   

- 예제2: 상수 곱하기

A=cbind(c(1,2,3),c(4,5,6),c(7,8,9))
A
     [,1] [,2] [,3]
[1,] 1    4    7   
[2,] 2    5    8   
[3,] 3    6    9   
-A
     [,1] [,2] [,3]
[1,] -1   -4   -7  
[2,] -2   -5   -8  
[3,] -3   -6   -9  
A*2
     [,1] [,2] [,3]
[1,] 2     8   14  
[2,] 4    10   16  
[3,] 6    12   18  

- 예제3: 덧셈, 뺄셈

A=cbind(c(1,2,3),c(4,5,6),c(7,8,9))
B=cbind(1:3,1:3,2:4)
A
     [,1] [,2] [,3]
[1,] 1    4    7   
[2,] 2    5    8   
[3,] 3    6    9   
B
     [,1] [,2] [,3]
[1,] 1    1    2   
[2,] 2    2    3   
[3,] 3    3    4   
A+B
     [,1] [,2] [,3]
[1,] 2    5     9  
[2,] 4    7    11  
[3,] 6    9    13  

- 예제4: 행렬곱셈

A=cbind(1:2,2:3)
A
     [,1] [,2]
[1,] 1    2   
[2,] 2    3   
A %*% A
     [,1] [,2]
[1,] 5     8  
[2,] 8    13  

- 예제5: 역행렬

A=rbind(c(0,1),c(2,0))
A
     [,1] [,2]
[1,] 0    1   
[2,] 2    0   
solve(A)
     [,1] [,2]
[1,] 0    0.5 
[2,] 1    0.0 
A %*% solve(A)
     [,1] [,2]
[1,] 1    0   
[2,] 0    1   

티블 만드는 방법

- 보통 초보단계에서는 일부러 만들기보다 만들어져 있는 경우가 많아요

- 벡터로 만들기

x<-c(1,2,3)
y<-c('a','b','c')
tb=tibble(x=x,y=y)
tb
  x y
1 1 a
2 2 b
3 3 c
tb$x
[1] 1 2 3
tb$y
[1] "a" "b" "c"

- 매트릭스로 만들기

X=cbind(1:10,31:40)
X
      [,1] [,2]
 [1,]  1   31  
 [2,]  2   32  
 [3,]  3   33  
 [4,]  4   34  
 [5,]  5   35  
 [6,]  6   36  
 [7,]  7   37  
 [8,]  8   38  
 [9,]  9   39  
[10,] 10   40  
tb=as_tibble(X)
tb
   V1 V2
1   1 31
2   2 32
3   3 33
4   4 34
5   5 35
6   6 36
7   7 37
8   8 38
9   9 39
10 10 40

티블을 쓰는 이유?

mutate

tb %>% mutate(V3=V1**2+V2,V4=-V3, V5=V4-1)
   V1 V2 V3  V4   V5  
1   1 31  32  -32  -33
2   2 32  36  -36  -37
3   3 33  42  -42  -43
4   4 34  50  -50  -51
5   5 35  60  -60  -61
6   6 36  72  -72  -73
7   7 37  86  -86  -87
8   8 38 102 -102 -103
9   9 39 120 -120 -121
10 10 40 140 -140 -141
  • 열간의 결합으로 새로운 열을 만들기 편리함
tb
   V1 V2
1   1 31
2   2 32
3   3 33
4   4 34
5   5 35
6   6 36
7   7 37
8   8 38
9   9 39
10 10 40
  • 연산을 해도 원래 데이터 프레임은 변화하지 않음. 변화를 위해서는 아래를 해야함.
tb <- tb %>% mutate(V3=V1**2+V2,V4=-V3, V5=V4-1)

- 아래와 같은코드임

mutate(tb, V3=V1**2+V2,V4=-V3, V5=V4-1)
   V1 V2 V3  V4   V5  
1   1 31  32  -32  -33
2   2 32  36  -36  -37
3   3 33  42  -42  -43
4   4 34  50  -50  -51
5   5 35  60  -60  -61
6   6 36  72  -72  -73
7   7 37  86  -86  -87
8   8 38 102 -102 -103
9   9 39 120 -120 -121
10 10 40 140 -140 -141

filter

tb2 <- tb %>% mutate(V3=V1**2+V2,V4=-V3, V5=V4-1)
tb2
   V1 V2 V3  V4   V5  
1   1 31  32  -32  -33
2   2 32  36  -36  -37
3   3 33  42  -42  -43
4   4 34  50  -50  -51
5   5 35  60  -60  -61
6   6 36  72  -72  -73
7   7 37  86  -86  -87
8   8 38 102 -102 -103
9   9 39 120 -120 -121
10 10 40 140 -140 -141
tb2 %>% filter(V1>5, V3<100)
  V1 V2 V3 V4  V5 
1 6  36 72 -72 -73
2 7  37 86 -86 -87

mutate + filter 가능

tb
   V1 V2
1   1 31
2   2 32
3   3 33
4   4 34
5   5 35
6   6 36
7   7 37
8   8 38
9   9 39
10 10 40
tb %>% mutate(V3=(V1-mean(V1))/sd(V1))
   V1 V2 V3        
1   1 31 -1.4863011
2   2 32 -1.1560120
3   3 33 -0.8257228
4   4 34 -0.4954337
5   5 35 -0.1651446
6   6 36  0.1651446
7   7 37  0.4954337
8   8 38  0.8257228
9   9 39  1.1560120
10 10 40  1.4863011
tb %>% mutate(V3=(V1-mean(V1))/sd(V1)) %>% filter(V3>0.5)
  V1 V2 V3       
1  8 38 0.8257228
2  9 39 1.1560120
3 10 40 1.4863011