[Fast campus] Data Science with R 1기 - 이부일 강사님
R 공부하면서 배운 내용 복습 겸 정리하는 곳입니다.
II. 요인(Factor)
# 벡터의 일종
# 차이점 : 집단(group)으로 인식함
# 1차원 - 하나의 열로 구성
# 벡터는 집단으로 인식하지 않음
# factor(vector, labels=, levels=, ordered=)
bt(blood type) 예제
1 2 3 | > bt = c("ab", "ab", "a", "a", "b") > bt [1] "ab" "ab" "a" "a" "b" | cs |
bt를 factor로 바꿔보자
1 2 3 4 | > bt_factor <- factor(bt) > bt_factor [1] ab ab a a b Levels: a ab b | cs |
# Levels : a ab b => 3개의 집단(a, ab, b)으로 인식함
bt_factor2 - labels
1 2 3 4 5 | > bt_factor2 <- factor(bt, labels = c("A형","AB형","B형")) > bt_factor2 [1] AB형 AB형 A형 A형 B형 Levels: A형 AB형 B형 | cs |
# labels : 데이터 값과 결과가 바뀜
bt_factor3 - levels
1 2 3 4 5 | > bt_factor3 <- factor(bt, levels = c("b","ab","a")) > bt_factor3 [1] ab ab a a b Levels: b ab a | cs |
# levels : 집단의 순서 - 데이터 자체는 바뀌지 않지만 b, ab, a 순으로 Levels이 바뀌게 됨
bt_factor4 - labels, levels
1 2 3 4 5 6 | > bt_factor4 <- factor(bt, + levels = c("b","ab","a"), + labels = c("B형","AB형","A형")) > bt_factor4 [1] AB형 AB형 A형 A형 B형 Levels: B형 AB형 A형 | cs |
# 2개의 argument 같이 사용할 시 labels의 값들은 levels에 대응되도록 사용해야 한다
bt_factor5
1 2 3 4 5 6 7 | > bt_factor5 <- factor(bt, + levels = c("b","ab","a"), + labels = c("A형","AB형","B형"), + ordered = TRUE) > bt_factor5 [1] AB형 AB형 B형 B형 A형 Levels: A형 < AB형 < B형 | cs |
# ordered : 특정한 결과값을 의미있게 구분할 때 사용 => 부등호가 나타남
factor의 속성
(1) levels(요인)
1 2 | > levels(bt_factor) [1] "a" "ab" "b" | cs |
(2) ordered(요인)
# 집단의 순서가 의미 있도록 변경
1 2 3 | > ordered(bt_factor) [1] ab ab a a b Levels: a < ab < b | cs |
# bt_factor의 속성을 ordered=TRUE로 만들어 주겠다는 것
III. 행렬(Matrix)
# 행(row)와 열(column)로 구성되어 있음
# 2차원 (행, 열)
# 벡터의 확장 -> 1차원에서 2차원으로
# 벡터의 규칙이 대부분 적용( Recycling Rule, Vectorization )
1. 행렬을 만드는 방법
(1) rbind(벡터1, 벡터2, ...) / cbind(벡터1, 벡터2, ...)
1 2 3 4 5 6 7 | > v1 = 1:3 > v2 = 4:6 > M1 = rbind(v1, v2) > M1 [,1] [,2] [,3] v1 1 2 3 v2 4 5 6 | cs |
# rbind : row를 기준으로 벡터를 결합하여 생성
# cbind : column을 기준으로 벡터를 결합하여 생성
(2) matrix(vector, nrow=, ncol=, byrow=)
1 2 3 4 | > matrix(1:4, nrow=2, ncol=2) [,1] [,2] [1,] 1 3 [2,] 2 4 | cs |
# R에서 행렬은 열(column)이 우선으로 채워진다.
1 2 3 4 | > matrix(1:4, nrow=2, ncol=2, byrow=TRUE) [,1] [,2] [1,] 1 2 [2,] 3 4 | cs |
# byrow = TRUE는 행(row)을 우선으로 행렬을 채우는 것
2. 행렬의 슬라이싱
# 행렬[ 행index, 열index ]
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 | > M3 [,1] [,2] [1,] 1 2 [2,] 3 4 > M3[1, ] # 1행 [1] 1 2 > M3[2, ] # 2행 [1] 3 4 > M3[1:2, ] #1,2행 [,1] [,2] [1,] 1 2 [2,] 3 4 > M3[ ,1 ] # 2열 [1] 1 3 > M3[ ,1:2 ] # 1,2열 [,1] [,2] [1,] 1 2 [2,] 3 4 > M3[1,2] # 1행, 2열 [1] 2 | cs |
3. 행렬의 덧셈과 뺄셈
# 형태(shape)가 동일해야 한다.
# 2x3 은 2x3 끼리만 연산 가능
1 2 3 4 5 6 7 8 9 10 11 12 | > A <- matrix(1:4, nrow=2, ncol=2) > B <- matrix(5:8, nrow=2, ncol=2) > A + B [,1] [,2] [1,] 6 10 [2,] 8 12 > A - B [,1] [,2] [1,] -4 -4 [2,] -4 -4 | cs |
# A*B -> 행렬의 곱셈?
1 2 3 4 | > A * B [,1] [,2] [1,] 5 21 [2,] 12 32 | cs |
# A*B는 단순히 index가 같은 값 끼리 연산하는 것으로 행렬의 곱셈은 아니다.
4. 행렬의 곱셈
# A_r1,c1 %*% B_r2,c2
# 조건 : c1 = r2 -> 곱하고자 하는 A의 열과 B의 행의 개수가 같아야 한다.
# 최종 결과는 r1xc2 matrix
1 2 3 4 5 6 | > A = matrix(1:4, nrow=2, ncol=2) > B = matrix(5:8, nrow=2, ncol=2) > A %*% B [,1] [,2] [1,] 23 31 [2,] 34 46 | cs |
5. 역행렬(Reverse Matrix)
# 조건 1 : 정방행렬(Square Matrix) - 행과 열의 개수가 같음
# 조건 2 : 행렬식이 0이 아니어야 함
ex)
A( a11, a12
a21, a22)
# 조건 1 : 2x2 행렬
# 조건 2 : (a11 x a22) - (a12 x a21) != 0
# 조건 2가지가 성립하므로 역행렬 결과는
A( a22, -a12
-a21, a11)
# 위의 결과에 1/(a11 x a22) - (a12 x a21) 을 곱해줌
# solve() 함수를 사용하여 역행렬을 구함
1 2 3 4 5 6 7 8 9 10 11 | > A1 = matrix(1:4, nrow=2, ncol=2) > A1 [,1] [,2] [1,] 1 3 [2,] 2 4 > A2 = solve(A1) > A2 [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 | cs |
# A1과 A2(A1의 역행렬)을 곱하면 단위행렬이 나옴
1 2 3 4 | > A1 %*% A2 [,1] [,2] [1,] 1 0 [2,] 0 1 | cs |
# 방정식 계산
2x + y = 3
-x + 3y = 10
1 2 3 4 5 6 | > B1 = matrix(c(2, 1, -1, 3), nrow=2, ncol=2) > B2 = matrix(c(3, 10), nrow=2, ncol=1) > solve(B1) %*% B2 [,1] [1,] 2.714286 [2,] 2.428571 | cs |
6. 전치행렬(Transpose Matrix)
# 행과 열을 바꿈
# t(행렬)
1 2 3 4 5 6 7 8 9 | > A [,1] [,2] [1,] 1 3 [2,] 2 4 > t(A) [,1] [,2] [1,] 1 2 [2,] 3 4 | cs |
'Programming > R' 카테고리의 다른 글
[Fast campus] 06. 데이터 핸들링 1 (0) | 2017.07.20 |
---|---|
[Fast campus] 05. 외부 데이터 읽어오기 (0) | 2017.07.19 |
[Fast campus] 04. 데이터의 유형(Type of Data) - 배열(Array), 데이터 프레임(Data.Frame), 리스트(List) (0) | 2017.07.19 |
[Fast campus] 02. 데이터의 유형(Type of Data) - 벡터(vector) (0) | 2017.07.19 |
[Fast campus] 01. Basic (0) | 2017.07.19 |