데이터 R지?
Ch09_데이터구조_1.4행렬
jsBae
2022. 5. 6. 20:19
1.4 행렬
#matrix() 함수
> x <- matrix(1:6, nrow = 3, ncol = 2) # 3행 X 2열의 행렬 생성
> x
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
>
> y <- matrix(1:8, nrow =2) # 2행 X 4열의 행렬 생성
> y
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
>
> z1 <- matrix(1:9, nrow=3, byrow= FALSE) # 3행 X 3행의 행렬, 순서를 열 기준으로
> z1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
>
> z2 <- matrix(1:9, nrow=3, byrow= TRUE) # 3행 X 3행의 행렬, 순서를 행 기준으로
> z2
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
#행과 열에 이름 부여
> rnames <- c('1행','2행','3행')
> cnames <- c('1열','2열')
>
> x <- matrix(1 : 6, nrow = 3, ncol = 2, dimnames = list(rnames,cnames))
> x
1열 2열
1행 1 4
2행 2 5
3행 3 6
#rbind, cbind 함수 사용
> a <- c(1:3)
> a
[1] 1 2 3
> b <- c(4:6)
> b
[1] 4 5 6
> c <- c(7:9)
> c
[1] 7 8 9
>
> x <- rbind(a,b,c) #행 방향으로 벡터 결합
> x
[,1] [,2] [,3]
a 1 2 3
b 4 5 6
c 7 8 9
>
> y <- cbind(a,b,c) #열 방향으로 벡터 결합
> y
a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
#rownames(), colnames() 함수를 통해 열과 행의 이름 변경하기
> rownames(x)
[1] "a" "b" "c"
> colnames(x)
NULL
> colnames(x) <- c('1열','2열','3열')
> x
1열 2열 3열
a 1 2 3
b 4 5 6
c 7 8 9
#행렬끼리의 결합
> x <- matrix(1:9, nrow=3)
> x
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
>
> y <- matrix(10:18, nrow=3)
> y
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
>
> z <- rbind(x, y)
> z
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[4,] 10 13 16
[5,] 11 14 17
[6,] 12 15 18
>
> z1 <- cbind(x, y)
> z1
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 7 10 13 16
[2,] 2 5 8 11 14 17
[3,] 3 6 9 12 15 18
###3. 행렬 스칼라 연산
> x <- matrix(1:9,nrow=3)
> x
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
>
> x+10
[,1] [,2] [,3]
[1,] 11 14 17
[2,] 12 15 18
[3,] 13 16 19
> x-10
[,1] [,2] [,3]
[1,] -9 -6 -3
[2,] -8 -5 -2
[3,] -7 -4 -1
> x*2
[,1] [,2] [,3]
[1,] 2 8 14
[2,] 4 10 16
[3,] 6 12 18
> x/2
[,1] [,2] [,3]
[1,] 0.5 2.0 3.5
[2,] 1.0 2.5 4.0
[3,] 1.5 3.0 4.5
> x%%2
[,1] [,2] [,3]
[1,] 1 0 1
[2,] 0 1 0
[3,] 1 0 1
>
> x
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> y <- matrix(-1:-9, nrow=3)
> y
[,1] [,2] [,3]
[1,] -1 -4 -7
[2,] -2 -5 -8
[3,] -3 -6 -9
>
> x+y
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
> x-y
[,1] [,2] [,3]
[1,] 2 8 14
[2,] 4 10 16
[3,] 6 12 18
> x*y
[,1] [,2] [,3]
[1,] -1 -16 -49
[2,] -4 -25 -64
[3,] -9 -36 -81
> x/(-y)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
>
> x <-matrix(1:6, nrow=2)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
>
> y <-matrix(-1:-6, nrow=3)
> y
[,1] [,2]
[1,] -1 -4
[2,] -2 -5
[3,] -3 -6
#2. 행렬 인덱싱
> x <- matrix(1:9, nrow=3, dimnames = list(c('1행','2행','3행'),c('1열','2열','3열')))
> x
1열 2열 3열
1행 1 4 7
2행 2 5 8
3행 3 6 9
> x[1,1] #1행, 1열의 원소
[1] 1
> x[2,3] #2행, 3열의 원소
[1] 8
> x[3,3] #3행, 3열의 원소
[1] 9
>
> x[1,] #1행의 원소들
1열 2열 3열
1 4 7
> x[3,] #3행의 원소들
1열 2열 3열
3 6 9
>
> x[,2] #2열의 원소들
1행 2행 3행
4 5 6
> x[,3] #3열의 원소들
1행 2행 3행
7 8 9
>
> x[1:2, ] #1~2행의 원소들
1열 2열 3열
1행 1 4 7
2행 2 5 8
> x[ ,2:3] #2~3열의 원소들
2열 3열
1행 4 7
2행 5 8
3행 6 9
> x[1:2,1:2] #1~2행, 1~2열의 원소들
1열 2열
1행 1 4
2행 2 5
>
> x[c(1,3), ] #1행, 3행의 원소들
1열 2열 3열
1행 1 4 7
3행 3 6 9
> x[ ,c(1,3)] #1열, 3열의 원소들
1열 3열
1행 1 7
2행 2 8
3행 3 9
>
> x[-c(1,3), ] #2행의 원소들
1열 2열 3열
2 5 8
> x[ ,-c(1,3)] #2열의 원소들
1행 2행 3행
4 5 6
> x <- matrix(c('a','b','c','d','e','f','g','h','i'), nrow=3)
> x
[,1] [,2] [,3]
[1,] "a" "d" "g"
[2,] "b" "e" "h"
[3,] "c" "f" "i"
>
> x[1,1] <- "hello"
> x[2,3] <- "hello"
> x[3,3] <- "hello"
>
> x[1,] <- c("hi","hi","hi")
> x
[,1] [,2] [,3]
[1,] "hi" "hi" "hi"
[2,] "b" "e" "hello"
[3,] "c" "f" "hello"
#3. 행렬 함수
| 함수명 | 설명 |
| colSums() | 열 합계 |
| rowSums() | 행 합계 |
| colMeans() | 열 평균 |
| rowMeans() | 행 평균 |
| t() | 전치행렬변환 |
| dim() | 행 열 개수 |
| nrow() | 열 개수 |
| ncol() | 행 개수 |
| length() | 원소 개수 |
> x <- matrix(1:12, nrow = 3)
> x
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> colSums(x)
[1] 6 15 24 33
> rowSums(x)
[1] 22 26 30
> colMeans(x)
[1] 2 5 8 11
> rowMeans(x)
[1] 5.5 6.5 7.5
> t(x)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
> x
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> dim(x)
[1] 3 4
> nrow(x)
[1] 3
> ncol(x)
[1] 4
> length(x)
[1] 12728x90
반응형