Programming/R
[R기초] Data object : Matrix 자료형
aram
2023. 7. 24. 15:31
matrix(data, nrow=숫자, ncol=숫자, byrow=, dimnames=)
- data : 데이터
- nrow : 행의 수
- ncol : 열의 수
- byrow : T - 행 우선, F - 열 우선. 기본값 : F
- dimnames : 행, 열의 이름 설정
# 생성
mat1 = matrix(c(1,2,3,4,5)) #4행 1열.
# [,1]
#[1,] 1
#[2,] 2
#[3,] 3
#[4,] 4
#[5,] 5
mat2 <- matrix(c(1,2,3,4), nrow=2) #2행2열. 열우선 생성
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
mat3 <- matrix(c(1,2,3,4), nrow=2, byrow=T) #2행2열. 행우선 생성
# [,1] [,2]
# [1,] 1 2
# [2,] 3 4
mat4 <- matrix(c(1,2,3,4), byrow=T) #1행4열. 행우선 생성
# [,1]
# [1,] 1
# [2,] 2
# [3,] 3
# [4,] 4
# Q. mat5 변수에 1-9까지 숫자를 3행 3열 매트릭스 생성
mat5 <- matrix(1:9, nrow=3, byrow=T)
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 4 5 6
#[3,] 7 8 9
# 조회
- [ , 숫자] : 열 조회
- [숫자, ] : 행 조회
- [숫자, 숫자] : 행과 열 사이 숫자 값 조회
#값을 조회하기
#1열의 값 조회
mat3[,1] #1 3
#1행의 값 조회
mat3[1,] #1 2
#2행 2열 값 조회
mat3[2,2] #4
# 추가
- rbind() : 행 추가
- cbind() : 열 추가
#행추가 : rbind()
mat5 <- rbind(mat5, c(11,12,13)) #4행 3열
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 4 5 6
# [3,] 7 8 9
# [4,] 11 12 13
#열추가 : cbind()
mat5 <- cbind(mat5, c(10,11,12,13)) #4행 4열
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 10
# [2,] 4 5 6 11
# [3,] 7 8 9 12
# [4,] 11 12 13 13
mat5 <- rbind(mat5, c(11,12,13)) #Warning: 개수 동일해야함
# 컬럼 이름 설정
- colnames() : 열 이름 설정
- rownames() : 행 이름 설정
# a,b,c,d 4개 문자열을 2행2열 matric 객체로 생성
mat6 <- matrix(c('a','b','c','d'), nrow=2, byrow=T)
# [,1] [,2] [,3]
#[1,] "a" "b" "e"
#[2,] "c" "d" "f"
colnames(mat6) <- c('First','Second','Third')
# First Second Third
#[1,] "a" "b" "e"
#[2,] "c" "d" "f"
rownames(mat6) <- c("one", "two")
# First Second Third
#one "a" "b" "e"
#two "c" "d" "f"
# 개수 및 자료형 확인
- nrow() : 행 개수 리턴
- ncol() : 열 개수 리턴
- length() : 속성 개수 확인
- mode() : 요소 자료형
nrow(mat6) #2 행 개수 리턴
ncol(mat6) #3 열 개수 리턴
length(mat6) #6 개수확인
mode(mat6) #"character" 요소 자료형
# matrix 연산
- a*b : 행렬 성분의 곱
- a%*%b : 행렬의 곱
- t(행렬) : 전치행렬 - 행과 열을 바꿈
- solve(행렬) : 역행렬 - 행렬의 곱의 결과가 단위행렬인 행렬
- %% : 단위행렬 - 대각선=1, 나머지=0
- 합계
: colSums(행렬, na.rm=T) 열별 합계
: rowSums(행렬, na.rm=T) 행별 합계 - (, na.rm=T) : 결측값 제외
- 평균
: colMeans(행렬) 열별 평균
: rowMeans(행렬) 행별 평균
a <- matrix(1:3, 3,3)
# [,1] [,2] [,3]
#[1,] 1 1 1
#[2,] 2 2 2
#[3,] 3 3 3
b <- matrix(4:6, 3,3)
# [,1] [,2] [,3]
# [1,] 4 4 4
# [2,] 5 5 5
# [3,] 6 6 6
a*b #행렬 성분의 곱
# [,1] [,2] [,3]
# [1,] 4 4 4
# [2,] 10 10 10
# [3,] 18 18 18
a%*%b # 행렬의 곱
# [,1] [,2] [,3] :: a의 각 행 * b의 각 열
# [1,] 15 15 15 : 1*4+1*5+1*6
# [2,] 30 30 30 : 2*4+2*5+2*6
# [3,] 45 45 45 : 3*4+3*5+3*6
c <- matrix(c(1,-2,4,-1,3,-5,2,7,5), 3,3)
# [,1] [,2] [,3]
# [1,] 1 -1 2
# [2,] -2 3 7
# [3,] 4 -5 5
t(c) #전치행렬
# [,1] [,2] [,3]
# [1,] 1 -2 4
# [2,] -1 3 -5
# [3,] 2 7 5
c1 = solve(c) #역행렬
# [,1] [,2] [,3]
# [1,] 6.25 -0.625 -1.625
# [2,] 4.75 -0.375 -1.375
# [3,] -0.25 0.125 0.125
c %*% c1 # 단위행렬
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 0 1 0
# [3,] 0 0 1
colSums(c) #3 -3 14 열별 합계
rowSums(c) #2 8 4 행별합계
x <- rep(1:4, 4)
x[9] = NA
m <- matrix(x, nrow=4)
# [,1] [,2] [,3] [,4]
# [1,] 1 1 NA 1
# [2,] 2 2 2 2
# [3,] 3 3 3 3
# [4,] 4 4 4 4
colSums(m) #10 10 NA 10 : 행의 합
rowSums(m) #NA 8 12 16 : 열의 합
# 결측값 제외
colSums(m, na.rm=T) # 10 10 9 10 행의 합
rowSums(m, na.rm=T) # 3 8 12 16 열의 합
# m matrix의 행의 평균, 열의 합 출력
colMeans(m, na.rm=T) # 2.5 2.5 3.0 2.5
rowMeans(m, na.rm=T) # 1 2 3 4
* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.
728x90