데이터 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] 12
728x90
반응형