팩터와 리스트 그리고 행렬
팩터란?
연속형 데이터 : 키,몸무게와 같이 숫자형으로 표현 가능한 데이터
범주형 데이터 : 성별,혈액형과 같이 범주(카테고리)로만 표현 가능한 데이터
-범주형 데이터는 산술 연산과 논리 연산이 불가하므로 팩터로 다룸
- vector(벡터), 팩터, 리스트는 1차원
- 데이터프레임, 행렬(matrix)는 2차원
- array는 3차원,N차원
v.1 <- c('M','F','M','F')
v.1
<ol class=list-inline> <li>‘M’</li> <li>‘F’</li> <li>‘M’</li> <li>‘F’</li> </ol>
f.1 <- factor(v.1)
f.1
<ol class=list-inline> <li>M</li> <li>F</li> <li>M</li> <li>F</li> </ol>
class(v.1)
‘character’
class(f.1)
‘factor’
str(v.1)
chr [1:4] "M" "F" "M" "F"
str(f.1)
Factor w/ 2 levels "F","M": 2 1 2 1
# 혈액형 팩터
v.2 <- c('A','B','AB','O')
v.2
<ol class=list-inline> <li>‘A’</li> <li>‘B’</li> <li>‘AB’</li> <li>‘O’</li> </ol>
f.2 <- factor(c('A','B','O','A','B'),levels = v.2)
f.2
<ol class=list-inline> <li>A</li> <li>B</li> <li>O</li> <li>A</li> <li>B</li> </ol>
f.2[length(f.2)+1] <- 'AB'
f.2
<ol class=list-inline> <li>A</li> <li>B</li> <li>O</li> <li>A</li> <li>B</li> <li>AB</li> </ol>
f.2[1] <- 'O'
f.2
<ol class=list-inline> <li>O</li> <li>B</li> <li>O</li> <li>A</li> <li>B</li> <li>AB</li> </ol>
f.2[2] <- 'x' #없는 levels으로 지정하면 오류남
Warning message in `[<-.factor`(`*tmp*`, 2, value = "x"):
"invalid factor level, NA generated"
f.2
<ol class=list-inline> <li>O</li> <li><NA></li> <li>O</li> <li>A</li> <li>B</li> <li>AB</li> </ol>
- factor은 vector의 한종류로 범주형데이터를 levels으로 지정할때 사용함
리스트란?
변수 : 통계학에서 측정하고자 하는 데이터를 의미
리스트: 원소의 자료형이 서로 다른 벡터들의 집합
lst <- list(name='주니온', gender='남', age=20, hansome=T)
lst
- $name
- '주니온'
- $gender
- '남'
- $age
- 20
- $hansome
- TRUE
typeof(lst)
‘list’
class(lst)
‘list’
str(lst)
List of 4
$ name : chr "주니온"
$ gender : chr "남"
$ age : num 20
$ hansome: logi TRUE
v.1 <- c('홍길동','전우치','로미오','줄리엣')
v.2 <- c('남','남','남','여')
v.3 <- c(18,19,17,15)
v.4 <- c(T,T,F,F)
lst.2 <- list(name=v.1,gender=v.2,age=v.3,oriental=v.4)
lst.2
- $name
- <ol class=list-inline>
- '홍길동'
- '전우치'
- '로미오'
- '줄리엣'
</ol> - $gender
- <ol class=list-inline>
- '남'
- '남'
- '남'
- '여'
</ol> - $age
- <ol class=list-inline>
- 18
- 19
- 17
- 15
</ol> - $oriental
- <ol class=list-inline>
- TRUE
- TRUE
- FALSE
- FALSE
</ol>
names(lst.2)
<ol class=list-inline> <li>‘name’</li> <li>‘gender’</li> <li>‘age’</li> <li>‘oriental’</li> </ol>
lst.2$name
<ol class=list-inline> <li>‘홍길동’</li> <li>‘전우치’</li> <li>‘로미오’</li> <li>‘줄리엣’</li> </ol>
lst.2[1] #LIST를 출력해줌
$name = <ol class=list-inline>
</ol>
lst.2[[1]] #벡터를 출력해줌
<ol class=list-inline> <li>‘홍길동’</li> <li>‘전우치’</li> <li>‘로미오’</li> <li>‘줄리엣’</li> </ol>
typeof(lst.2[1])
‘list’
class(lst.2[1])
‘list’
typeof(lst.2[[1]]) #벡터가 character임
‘character’
lst.2[1:3]
- $name
- <ol class=list-inline>
- '홍길동'
- '전우치'
- '로미오'
- '줄리엣'
</ol> - $gender
- <ol class=list-inline>
- '남'
- '남'
- '남'
- '여'
</ol> - $age
- <ol class=list-inline>
- 18
- 19
- 17
- 15
</ol>
lst.2[[1]]
<ol class=list-inline> <li>‘홍길동’</li> <li>‘전우치’</li> <li>‘로미오’</li> <li>‘줄리엣’</li> </ol>
lst.2[1:3][3]
$age = <ol class=list-inline>
</ol>
lst.2[[1]][3]
‘로미오’
행렬이란?
2차원 데이터
행,열로 구성된 벡터의 집합
행렬의 모든 원소는 같은 자료형
행렬의 생성: matrix() 함수
- matrix(x, nrow, ncol, byrow)
m <- matrix(1:12, nrow=3, ncol=4)
m
1 | 4 | 7 | 10 |
2 | 5 | 8 | 11 |
3 | 6 | 9 | 12 |
m <- matrix(1:12, nrow=4, ncol=3, byrow=T)
m
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 | 12 |
v.1 <- 1:3
v.1
<ol class=list-inline> <li>1</li> <li>2</li> <li>3</li> </ol>
v.2 <- 4:6
v.2
<ol class=list-inline> <li>4</li> <li>5</li> <li>6</li> </ol>
m.1 <-rbind(v.1,v.2)
m.1
v.1 | 1 | 2 | 3 |
---|---|---|---|
v.2 | 4 | 5 | 6 |
m.2 <- cbind(v.1,v.2)
m.2
v.1 | v.2 |
---|---|
1 | 4 |
2 | 5 |
3 | 6 |
m.3 <- rbind(m.1,v.1)
m.3
v.1 | 1 | 2 | 3 |
---|---|---|---|
v.2 | 4 | 5 | 6 |
v.1 | 1 | 2 | 3 |
m.4 <-cbind(m.2,v.2)
m.4
v.1 | v.2 | v.2 |
---|---|---|
1 | 4 | 4 |
2 | 5 | 5 |
3 | 6 | 6 |
str(m.1)
int [1:2, 1:3] 1 4 2 5 3 6
- attr(*, "dimnames")=List of 2
..$ : chr [1:2] "v.1" "v.2"
..$ : NULL
names(m.1)
NULL
rownames(m.1)
<ol class=list-inline> <li>‘v.1’</li> <li>‘v.2’</li> </ol>
dim(m.1) #행렬 row,col 숫자반환
<ol class=list-inline> <li>2</li> <li>3</li> </ol>
#행렬의 인덱싱
m <- matrix(1:25,nrow=5,ncol=5,byrow=T)
m
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 |
#m[row,col]
m[1,1]
1
m[,3]
<ol class=list-inline> <li>3</li> <li>8</li> <li>13</li> <li>18</li> <li>23</li> </ol>
m[1:3,4:5]
4 | 5 |
9 | 10 |
14 | 15 |
class(m[1,])
‘integer’
class(m[1:3])
‘integer’
m[1:3]
<ol class=list-inline> <li>1</li> <li>6</li> <li>11</li> </ol>
class(m[1:3,4:5])
‘matrix’