Home R Programming 3주차
Post
Cancel

R Programming 3주차

월요일

벡터 인덱스 네이밍

  • 벡터 인덱스 네이밍
    1
    2
    3
    4
    5
    6
    
      vec <- vector()
      vec <- 1:10
      vec2 <- c("abc", "def")
      vec3 <- c(T,F,T,F)
      names(vec2) <- c("first","second")
      vec2["first"]
    

    벡터의 인덱스에 이름을 부여할 수 있다. 인덱스에 이름이 부여되면 파이썬처럼 텍스트 인덱스를 쓸 수 있다.

Matrix(행렬)

  • Matrix (행렬)

    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
    26
    27
    28
    29
    30
    
      x1 <- matrix(1:20,nrow=5,ncol=2,byrow=T)
      x2 <- matrix(1:10,5,2,byrow = F)
      print(x1)
      print(x2)
      cbind(x1,x2)
      rbind(x1,x2)
    
      A <- matrix(1:12,4,3)
      rownames(A) <- c(paste0("n", 1:4))
      colnames(A) <- c(paste0("x", 1:3))
      print(A)
      A[1,]
      A[,2]
      A[,-3]
      B <- matrix(1,4,3)
      A + B
    
      a <- matrix(1:6,2,3); b <- matrix(1,3,2)
      a%*%b
      A <- matrix(1:4,2,2)
      solve(A)
    
      A <- matrix(1:12,4,3)
      t(A)
      A <- matrix(1:9,3,3)
      sum(diag(A))
    
      A <- matrix(1:4,2,2)
      det(A)
      eigen(A)$values
    

    matrix()를 활용하면 행렬을 만들 수가 있다.

    • 이때 중요한 옵션은 byrow옵션이다. byrow의 default값은 FALSE이다. byrow가 TRUE인 경우는 행렬 데이터를 채울 때 행을 우선으로 채우고 FALSE인 경우 열을 우선으로 채우게 된다.

    • cbind(); rbind()는 두 행렬을 어떤 기준으로 이어 붙이는지를 결정해 준다. cbind()는 앞의 행렬에 뒤 행렬을 행기준으로 열을 붙이고 rbind()는 앞의 행렬에 뒤 행렬을 열기준으로 행을 붙인다. rownamescolnames를 활용하면 행과 열에 이름을 부여할 수 있다.

    • 인덱스를 정확한 좌표로 기록하지 않고 A[1,]과 같이 입력하면 해당 데이터의 1행을 모두 출력해준다. 이때 인덱스에 -가 들어가면 해당 열, 혹은 행을 제외하고 출력해주는 명령어가 된다.

    • 기본 행렬 연산을 모두 지원한다. 간단한 행렬 합과 곱을 모두 지원하는데 당연하게 합, 곱 연산시의 기본 조건은 지켜야한다. A%*%B는 두 행렬의 곱연산을 나타내는데, 이때 반드시 지켜야하는 조건은 ‘앞의 열수 = 뒤의 행수’이다. 만약 단순하게 A*B를 하면 두 행렬의 원소별 곱을 지원하기도 한다.

    • solve()는 역행렬을 반환해준다.

    • t()는 행렬의 transpose(전치)를 반환해준다.

    • diag()를 활용하면 대각행렬을 만들 수 있다. 함수 내부에 어떤 값이 들어가냐에따라 역할이 달라진다.
      1. 숫자 -> n x n 단위행렬
      2. 벡터 -> 해당 벡터가 대각성분인 대각행렬
      3. 행렬 -> 해당 행렬의 대각성분 반환
    • det()를 활용하면 행렬의 determinant를 알려준다.

    • eigen()을 활용하면 eigen value혹은 eigen vector를 알 수 있기때문에 행렬의 고유값과 고유벡터를 알 수 있다. $연산자를 활용해서 values와 vectors를 각각 반환 가능하다.

list

  • list
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
      lst1 = list(a = 1:10, b =matrix(1:4,2,2))
      lst2 <- list()
      lst2[[1]] <- matrix(1:10,5,2)
      lst2[[2]] <- lst1
    
      lst1$a
      lst1$b
    
      lst1[1]
      lst1[[1]]
      lst2[[1]]
      lst2[[1]][3]
      lst1[[2]]
      lst1[2]
      lst2[2]
      lst2[1]
      lst2[[2]][[1]]
    

    R에서 다양한 데이터를 한꺼번에 담을 수 있는 가장 포괄적 객체이다. 모든 객체를 담을 수 있으며 동시에 다양한 type으로 담을 수 있다. 변수 이름을 부여해서 데이터를 관리할 수도 있으며 데이터 저장인덱스를 불러올 수도 있다.

목요일

factor type

  • factor type
    1
    2
    3
    4
    5
    6
    7
    
      grade <- c("A", "A", "B", "C", "B", "B")
      f.grade <- factor(grade)
      f2.grade <- factor(grade, order = T)
      lev <- c("C", "B", "A")
      f3.grade <- factor(grade, levels = lev, order = T)
      levels(f2.grade)
      levels(f3.grade)
    

    범주형 자료분석에 유용한 객체이다. 보통 명목형, 순서형자료에 사용한다.

    • level을 가지고 있기때문에 순서를 구분이 가능하다.

    • factor생성할 때, order이 T인 경우 순서형, F인 경우 명목형으로 저장한다.

    • 얼핏 보면 벡터와 굉장히 유사한 것을 알 수 있지만 factor는 지정된 인덱스를 벗어난 값은 접근이 불가능하다.

data.frame

  • data.frame
    1
    2
    3
    4
    5
    6
    7
    
      x1 = 1:4; x2 <- c("kim","lee","jung","park")
      dat = data.frame(x1,x2)
      dat2 = data.frame(num=x1, name=x2)
      dat3 = data.frame(x1,x2,stringsAsFactors = F)
    
      dat[1]; dat[2]
      dat[[1]]; dat[[2]]
    

    data.frame은 행렬과 리스트가 합쳐진 것이라 생각하면 편하다.

    • 데이터프레임에 저장할 변수는 길이가 동일해야한다. 다르면 계속해서 에러가 난다.
    • 조심해야하는 점이 한 가지 있다. 숫자를 다루게 될 경우 문자와 섞이게 되거나, 문자로 적힌 숫자인 경우에는 문자로 인식해서 factor타입으로 변형을 시키게되는데, 이때 이 값으로 연산을 하면 값으로 계산을 하는 게 아니라 factor에 있는 level로 계산을 하게 된다. 이를 막기 위해서 stringsAsFactors = F를 이용하면 막을 수 있다.

array

  • array
    1
    2
    
      x1 <- array(1:24,dim=c(4,3,2))
      x2 <- array(1:32, dim=c(2,2,4,2))
    

    n차원의 데이터 저장방법이다. 행렬과 유사한 형태이다. dim을 통해서 n x m과 높이, 반복수 등을 정할 수 있다. 정확하게 말하면 반복보다는 차원의 개수를 지정해준다. 3차원 직육면체 큐브를 몇개 만들 것인가 지정해준다고 생각하면 편하다. 위의 코드로 예시를 들면 (상상해시길)

    • 1번 코드는 1~24를 저장하는 행렬을 배열로 만든다. 이때, 행렬의 기본 형식을 4x3이고 큐브의 층은 2층이다.

    • 2번 코드는 1~32를 저장하는 행렬을 배열로 만든다. 행렬의 기본 형식은 2x2이고 층수는 4개이다. 이런 직육면체 큐브를 2개를 만들면 된다.

apply

  • apply
    1
    2
    3
    4
    
      x_mat <- matrix(rnorm(100),20,5)
      x_mat
      apply(x_mat,2,mean)
      apply(x_mat,1,sum)
    

    apply는 반복문의 사용을 극도로 줄여준다. 1을 사용하면 모든 행, 2를 사용하면 모든 열에 함수를 적용시킨다.

This post is licensed under CC BY 4.0 by the author.

R Programming 2주차

R Programming 4주차

Comments powered by Disqus.