팩터와 리스트 그리고 행렬

팩터란?

연속형 데이터 : 키,몸무게와 같이 숫자형으로 표현 가능한 데이터

범주형 데이터 : 성별,혈액형과 같이 범주(카테고리)로만 표현 가능한 데이터

-범주형 데이터는 산술 연산과 논리 연산이 불가하므로 팩터로 다룸 
- 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>

<summary style=display:list-item;cursor:pointer> Levels: </summary> <ol class=list-inline>
  • 'F'
  • 'M'
  • </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>

    <summary style=display:list-item;cursor:pointer> Levels: </summary> <ol class=list-inline>
  • 'A'
  • 'B'
  • 'AB'
  • 'O'
  • </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>

    <summary style=display:list-item;cursor:pointer> Levels: </summary> <ol class=list-inline>
  • 'A'
  • 'B'
  • 'AB'
  • 'O'
  • </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>

    <summary style=display:list-item;cursor:pointer> Levels: </summary> <ol class=list-inline>
  • 'A'
  • 'B'
  • 'AB'
  • 'O'
  • </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>

    <summary style=display:list-item;cursor:pointer> Levels: </summary> <ol class=list-inline>
  • 'A'
  • 'B'
  • 'AB'
  • 'O'
  • </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>

  • 18
  • 19
  • 17
  • 15
  • </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
    101112
    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.1123
    v.2456
    m.2 <- cbind(v.1,v.2)
    
    m.2
    
    v.1v.2
    14
    25
    36
    m.3 <- rbind(m.1,v.1)
    
    m.3
    
    v.1123
    v.2456
    v.1123
    m.4 <-cbind(m.2,v.2)
    
    m.4
    
    v.1v.2v.2
    144
    255
    366
    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 910
    1112131415
    1617181920
    2122232425
    #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
    910
    1415
    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’