3-1 기본적인 매트릭스 만들기
z <- matrix(1:20, nrow=4,ncol=5)
z # 매트릭스 z의 내용을 출력
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
3-2 매트릭스에 저장될 값들을 행 방향으로 채우기
z2 <- matrix(1:20, nrow=4, ncol=5, byrow=T)
z2 # 매트릭스 z2의 내용을 출력
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
## [3,] 11 12 13 14 15
## [4,] 16 17 18 19 20
3-3 기존 매트릭스에 벡터를 추가하여 새로운 매트릭스 만들기
x <- 1:4 # 벡터 x 생성
y <- 5:8 # 벡터 y 생성
z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
m1 <- cbind(x,y) # x와 y를 열 방향으로 결합하여 매트릭스 생성
m1 # 매트릭스 m1의 내용을 출력
## x y
## [1,] 1 5
## [2,] 2 6
## [3,] 3 7
## [4,] 4 8
m2 <- rbind(x,y) # x와 y를 행 방향으로 결합하여 매트릭스 생성
m2 # 매트릭스 m2의 내용을 출력
## [,1] [,2] [,3] [,4]
## x 1 2 3 4
## y 5 6 7 8
m3 <- rbind(m2,x) # 매트릭스 m2와 벡터 x를 행 방향으로 결합
m3 # 매트릭스 m3의 내용을 출력
## [,1] [,2] [,3] [,4]
## x 1 2 3 4
## y 5 6 7 8
## x 1 2 3 4
m4 <- cbind(z,x) # 매트릭스 z와 벡터 x를 열 방향으로 결합
m4 # 매트릭스 m4의 내용을 출력
## x
## [1,] 1 5 9 13 17 1
## [2,] 2 6 10 14 18 2
## [3,] 3 7 11 15 19 3
## [4,] 4 8 12 16 20 4
3-4 인덱스값을 이용하여 매트릭스에서의 값 추출하기
z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
z # 매트릭스 z의 내용 출력
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
z[2,3] # 2행 3열에 있는 값
## [1] 10
z[1,4] # 1행 4열에 있는 값
## [1] 13
z[2,] # 2행에 있는 모든 값
## [1] 2 6 10 14 18
z[2,, drop=FALSE] # 차원축소 하지 않기: 행렬차원으로 출력
## [,1] [,2] [,3] [,4] [,5]
## [1,] 2 6 10 14 18
z[,4] # 4열에 있는 모든 값
## [1] 13 14 15 16
3-5 매트릭스에서 여러 개의 값을 동시에 추출하기
z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
z # 매트릭스 z의 내용 출력
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
z[2,1:3] # 2행의 값 중 1~3열에 있는 값
## [1] 2 6 10
z[2,1:3, drop=FALSE] # 2행의 값 중 1~3열에 있는 값(2차원 즉 행렬(matrix) 유지)
## [,1] [,2] [,3]
## [1,] 2 6 10
z[1,c(1,2,4)] # 1행의 값 중 1, 2, 4열에 있는 값
## [1] 1 5 13
z[1,c(1,2,4), drop=FALSE] # 1행의 값 중 1, 2, 4열에 있는 값(2차원 즉 행렬 유지)
## [,1] [,2] [,3]
## [1,] 1 5 13
z[1:2,] # 1, 2행에 있는 모든 값
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
z[,c(1,4)] # 1, 4열에 있는 모든 값
## [,1] [,2]
## [1,] 1 13
## [2,] 2 14
## [3,] 3 15
## [4,] 4 16
3-6 매트릭스의 행과 열에 이름을 지정하는 방법
score <- matrix(c(90,85,69,78,
85,96,49,95,
90,80,70,60),
nrow=4, ncol=3)
score
## [,1] [,2] [,3]
## [1,] 90 85 90
## [2,] 85 96 80
## [3,] 69 49 70
## [4,] 78 95 60
rownames(score) <- c('John','Tom','Mark','Jane')
colnames(score) <- c('English','Math','Science')
score
## English Math Science
## John 90 85 90
## Tom 85 96 80
## Mark 69 49 70
## Jane 78 95 60
3-7 행과 열에 지정한 이름을 이용하여 매트릭스 값 추출하기
score['John','Math'] # John의 수학 성적
## [1] 85
score['Tom',c('Math','Science')] # Tom의 수학, 과학 성적
## Math Science
## 96 80
score['Mark',] # Mark의 모든 과목 성적
## English Math Science
## 69 49 70
score[,'English'] # 모든 학생의 영어 성적
## John Tom Mark Jane
## 90 85 69 78
rownames(score) # score의 행의 이름
## [1] "John" "Tom" "Mark" "Jane"
colnames(score) # score의 열의 이름
## [1] "English" "Math" "Science"
colnames(score)[2] # score의 열의 이름 중 두 번째 값
## [1] "Math"
3-10 state.x77 데이터엣의 기본 내용 확인하기
dim(state.x77) # 행과 열의 개수 출력
## [1] 50 8
nrow(state.x77) # 행의 개수 출력
## [1] 50
ncol(state.x77) # 열의 개수 출력
## [1] 8
colnames(state.x77) # 열 이름 출력, names( )와 결과 동일
## [1] "Population" "Income" "Illiteracy" "Life Exp" "Murder"
## [6] "HS Grad" "Frost" "Area"
head(state.x77) # 데이터셋의 앞부분 일부 출력
## Population Income Illiteracy Life Exp Murder HS Grad Frost Area
## Alabama 3615 3624 2.1 69.05 15.1 41.3 20 50708
## Alaska 365 6315 1.5 69.31 11.3 66.7 152 566432
## Arizona 2212 4530 1.8 70.55 7.8 58.1 15 113417
## Arkansas 2110 3378 1.9 70.66 10.1 39.9 65 51945
## California 21198 5114 1.1 71.71 10.3 62.6 20 156361
## Colorado 2541 4884 0.7 72.06 6.8 63.9 166 103766
tail(state.x77) # 데이터셋의 뒷부분 일부 출력
## Population Income Illiteracy Life Exp Murder HS Grad Frost Area
## Vermont 472 3907 0.6 71.64 5.5 57.1 168 9267
## Virginia 4981 4701 1.4 70.08 9.5 47.8 85 39780
## Washington 3559 4864 0.6 71.72 4.3 63.5 32 66570
## West Virginia 1799 3617 1.4 69.48 6.7 41.6 100 24070
## Wisconsin 4589 4468 0.7 72.48 3.0 54.5 149 54464
## Wyoming 376 4566 0.6 70.29 6.9 62.9 173 97203
3-11 state.x77 데이터셋의 추가적인 내용 확인하기
str(state.x77) # 행렬 데이터셋의 내부 구조 확인 하기
## num [1:50, 1:8] 3615 365 2212 2110 21198 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
## ..$ : chr [1:8] "Population" "Income" "Illiteracy" "Life Exp" ...
state.x77[,5] # 기대수명 데이터 보기
## Alabama Alaska Arizona Arkansas California
## 15.1 11.3 7.8 10.1 10.3
## Colorado Connecticut Delaware Florida Georgia
## 6.8 3.1 6.2 10.7 13.9
## Hawaii Idaho Illinois Indiana Iowa
## 6.2 5.3 10.3 7.1 2.3
## Kansas Kentucky Louisiana Maine Maryland
## 4.5 10.6 13.2 2.7 8.5
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3.3 11.1 2.3 12.5 9.3
## Montana Nebraska Nevada New Hampshire New Jersey
## 5.0 2.9 11.5 3.3 5.2
## New Mexico New York North Carolina North Dakota Ohio
## 9.7 10.9 11.1 1.4 7.4
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 6.4 4.2 6.1 2.4 11.6
## South Dakota Tennessee Texas Utah Vermont
## 1.7 11.0 12.2 4.5 5.5
## Virginia Washington West Virginia Wisconsin Wyoming
## 9.5 4.3 6.7 3.0 6.9
class(state.x77[,5]) # 기대수명 데이터의 데이터 type 확인(numeric vector)
## [1] "numeric"
unique(state.x77[,3])# 문맹률 보기(중복 제거)
## [1] 2.1 1.5 1.8 1.9 1.1 0.7 0.9 1.3 2.0 0.6 0.5 1.6 2.8 2.4 0.8 2.2 1.4 1.0 2.3
## [20] 1.7
table(state.x77[,3]) # 문맹률별 행의 개수 세기(frequency table)
##
## 0.5 0.6 0.7 0.8 0.9 1 1.1 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.8
## 3 10 5 3 4 1 5 2 3 1 1 1 2 2 1 1 2 1 1 1
3-12 행렬, 열별 합계와 평균
colSums(state.x77) # 열별 합계
## Population Income Illiteracy Life Exp Murder HS Grad Frost
## 212321.00 221790.00 58.50 3543.93 368.90 2655.40 5223.00
## Area
## 3536794.00
colMeans(state.x77) # 열별 평균
## Population Income Illiteracy Life Exp Murder HS Grad Frost
## 4246.4200 4435.8000 1.1700 70.8786 7.3780 53.1080 104.4600
## Area
## 70735.8800
rowSums(state.x77) # 행별 합계
## Alabama Alaska Arizona Arkansas California
## 58094.55 573412.81 120312.25 57620.56 182838.71
## Colorado Connecticut Delaware Florida Georgia
## 111500.46 13581.68 7604.76 67328.26 67280.04
## Hawaii Idaho Illinois Indiana Iowa
## 12399.60 87872.27 72312.94 46121.58 63704.36
## Kansas Kentucky Louisiana Maine Maryland
## 88987.58 46964.80 52419.96 35961.49 19544.92
## Massachusetts Michigan Minnesota Mississippi Missouri
## 18632.73 70939.43 88178.46 52908.99 78253.59
## Montana Nebraska Nevada New Hampshire New Jersey
## 150970.36 82809.40 115962.23 14426.83 20335.73
## New Mexico New York North Carolina North Dakota Ohio
## 126414.42 71027.55 58314.61 75308.28 56527.22
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 75692.52 103308.93 61528.73 6787.00 36860.66
## South Dakota Tennessee Texas Utah Vermont
## 81102.58 49516.61 278726.70 87603.30 13948.84
## Virginia Washington West Virginia Wisconsin Wyoming
## 49675.78 75165.12 29705.18 63800.68 102458.69
rowMeans(state.x77) # 행별 평균
## Alabama Alaska Arizona Arkansas California
## 7261.819 71676.601 15039.031 7202.570 22854.839
## Colorado Connecticut Delaware Florida Georgia
## 13937.558 1697.710 950.595 8416.032 8410.005
## Hawaii Idaho Illinois Indiana Iowa
## 1549.950 10984.034 9039.118 5765.198 7963.045
## Kansas Kentucky Louisiana Maine Maryland
## 11123.448 5870.600 6552.495 4495.186 2443.115
## Massachusetts Michigan Minnesota Mississippi Missouri
## 2329.091 8867.429 11022.308 6613.624 9781.699
## Montana Nebraska Nevada New Hampshire New Jersey
## 18871.295 10351.175 14495.279 1803.354 2541.966
## New Mexico New York North Carolina North Dakota Ohio
## 15801.802 8878.444 7289.326 9413.535 7065.903
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 9461.565 12913.616 7691.091 848.375 4607.583
## South Dakota Tennessee Texas Utah Vermont
## 10137.823 6189.576 34840.838 10950.413 1743.605
## Virginia Washington West Virginia Wisconsin Wyoming
## 6209.472 9395.640 3713.148 7975.085 12807.336
3-13 행과 열의 방향 전환
z <- matrix(1:20, nrow=4, ncol=5)
z
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
t(z) # 행과 열 방향 전환
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [4,] 13 14 15 16
## [5,] 17 18 19 20
3-14 행과 열의 값 추출
st.1 <- state.x77[,c(3,4)] # 3, 4열의 값만 추출
head(st.1)
## Illiteracy Life Exp
## Alabama 2.1 69.05
## Alaska 1.5 69.31
## Arizona 1.8 70.55
## Arkansas 1.9 70.66
## California 1.1 71.71
## Colorado 0.7 72.06
3-15 매트릭스에 대한 산술연산
a <- matrix(1:20,4,5)
b <- matrix(21:40,4,5)
a
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
b
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 30 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
2*a # 매트릭스 a에 저장된 값들에 2를 곱하기
## [,1] [,2] [,3] [,4] [,5]
## [1,] 2 10 18 26 34
## [2,] 4 12 20 28 36
## [3,] 6 14 22 30 38
## [4,] 8 16 24 32 40
b-5
## [,1] [,2] [,3] [,4] [,5]
## [1,] 16 20 24 28 32
## [2,] 17 21 25 29 33
## [3,] 18 22 26 30 34
## [4,] 19 23 27 31 35
2*a + 3*b
## [,1] [,2] [,3] [,4] [,5]
## [1,] 65 85 105 125 145
## [2,] 70 90 110 130 150
## [3,] 75 95 115 135 155
## [4,] 80 100 120 140 160
a+b
## [,1] [,2] [,3] [,4] [,5]
## [1,] 22 30 38 46 54
## [2,] 24 32 40 48 56
## [3,] 26 34 42 50 58
## [4,] 28 36 44 52 60
b-a
## [,1] [,2] [,3] [,4] [,5]
## [1,] 20 20 20 20 20
## [2,] 20 20 20 20 20
## [3,] 20 20 20 20 20
## [4,] 20 20 20 20 20
b/a
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21.000000 5.000000 3.222222 2.538462 2.176471
## [2,] 11.000000 4.333333 3.000000 2.428571 2.111111
## [3,] 7.666667 3.857143 2.818182 2.333333 2.052632
## [4,] 6.000000 3.500000 2.666667 2.250000 2.000000
a*b
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 125 261 429 629
## [2,] 44 156 300 476 684
## [3,] 69 189 341 525 741
## [4,] 96 224 384 576 800
a <- a*3
b <- b-5
3-16 매트릭스의 자료형 확인
class(iris) # iris 데이터셋의 자료형 확인
## [1] "data.frame"
class(state.x77) # state.x77 데이터셋의 자료형 확인
## [1] "matrix"
is.matrix(iris) # iris 데이터셋이 행렬(matrix)인지를 확인하는 함수
## [1] FALSE
is.matrix(state.x77) # state.x77 데이터셋이 행렬(matrix)인지를 확인하는 함수
## [1] TRUE
3-17 매트릭스의 자료형 변환
# 매트릭스를 데이터프레임으로 변환
st <- data.frame(state.x77)
head(st)
## Population Income Illiteracy Life.Exp Murder HS.Grad Frost Area
## Alabama 3615 3624 2.1 69.05 15.1 41.3 20 50708
## Alaska 365 6315 1.5 69.31 11.3 66.7 152 566432
## Arizona 2212 4530 1.8 70.55 7.8 58.1 15 113417
## Arkansas 2110 3378 1.9 70.66 10.1 39.9 65 51945
## California 21198 5114 1.1 71.71 10.3 62.6 20 156361
## Colorado 2541 4884 0.7 72.06 6.8 63.9 166 103766
class(st)
## [1] "data.frame"
# 데이터프레임을 매트릭스로 변환
iris.m <- as.matrix(iris[,1:4])
head(iris.m)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,] 5.1 3.5 1.4 0.2
## [2,] 4.9 3.0 1.4 0.2
## [3,] 4.7 3.2 1.3 0.2
## [4,] 4.6 3.1 1.5 0.2
## [5,] 5.0 3.6 1.4 0.2
## [6,] 5.4 3.9 1.7 0.4
class(iris.m)
## [1] "matrix"
배열(array) 생성 및 인덱싱
z <- 1:24
dim(z) <- c(3,4,2)
z
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
ary <- array(1:12, c(2,3,2))
ary
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 7 9 11
## [2,] 8 10 12
ary[1,3,2]
## [1] 11
ary[,1,2]
## [1] 7 8
ary[,1,2,drop=FALSE]
## , , 1
##
## [,1]
## [1,] 7
## [2,] 8
ary[2,,]
## [,1] [,2]
## [1,] 2 8
## [2,] 4 10
## [3,] 6 12