[R] 벡터 다루기(입출력)

반응형
    반응형

    R에서의 벡터에 대한 내용입니다.

    벡터

    벡터는 R의 기본 데이터 단위입니다.
    원소(스칼라)가 하나이면 원자 벡터라고 합니다.
    하나의 데이터 타입만이 가능하기 때문에 숫자형, 논리형, 글자형 중 하나로만 입력이 가능합니다.
    c(...)으로 입력하면 벡터가 만들어집니다.

    > c(1,2,3,4)
    [1] 1 2 3 4

    R에서의 모든 데이터는 key-value 방식이 가능해서 이름을 지정할 수 있다.

    > c(a=1,b=2,c=3,d=4)
    a b c d 
    1 2 3 4 

    강제형변환

    벡터는 기본적으로 같은 데이터 타입만을 가질 수 있습니다. 그럼에도 다른 데이터 타입을 넣으면 오류가 뜨진 않고 강제로 데이터 타입을 고정시켜버립니다.
    이것을 강제형변환이라고 합니다.

    강제형변환이 되는 우선순위는

    1. 문자형
    2. 숫자형
    3. 논리형

    으로 다양한 타입이 있어도 하나의 타입으로 바뀌게 됩니다.

    # 문자가 있으면 문자형으로 지정됨
    > vector = c(1,'T',F)
    > typeof(vector)
    [1] "character"
    
    # 숫자+논리형이면 숫자형으로 지정
    > vector1= c(1,T)
    > mode(vector1)
    [1] "numeric"

    간단하게 숫자형 벡터 만들기

    c()말고도 벡터를 만들 수 있는데 파이썬에서의 arrange 기능과 같습니다.

    > 1:10
    [1]  1  2  3  4  5  6  7  8  9 10

    연산방식

    위와 같은 방식의 벡터는 연산방식이 특이합니다.

    10개 + 1개 데이터

    1개의 데이터를 더하라 명하면 모든 스칼라에 값을 더합니다.

    > 1:10+10
     [1] 11 12 13 14 15 16 17 18 19 20

    10개+ 다른길이(짝이 맞을때)

    서로 다른 길이를 더할 수 있는데 짝이 맞으면 연속해서 더하게 됩니다. 이를 재활용 규칙이라고 합니다.

    > 1:10 +1:5
    [1]  2  4  6  8 10  7  9 11 13 15

    그림으로 보면 1:5가 연속해서 더해지는 것이 어떤 것인지 볼 수 있습니다.

    10개+다른길이(짝이 안 맞을 때)

    짝이 안 맞아도 연산을 진행을 하기는 하지만 경고 메세지가 뜹니다. 안 되는 건 아닙니다. 그래서 필요하다면 그냥 하면 됩니다.

    > 1:10 + 1:4
    [1]  2  4  6  8  6  8 10 12 10 12

    벡터 원소의 일부 가져오기

    벡터 원소의 일부만 가져오는 방법입니다.
    서브셋이라고 불립니다.
    논리형(True,False)를 이용하거나 인덱싱을 이용합니다.
    key(이름)을 지정했다면 key을 이용할 수도 있습니다.

    논리형 사용

    다음과 같이 sub라는 벡터를 만들었습니다.

    sub =c('a','b','c','d','e')

    이중에서 a,c,e 만 가져와 보겠습니다.

    > sub[c(T,F,T,F,T)] # sub[c(T,F)]
    [1] "a" "c" "e"

    각 데이터 수에 맞게 T,F를 다 써주던지 R의 반복하는 방식을 이용합니다.

    데이터 갯수보다 T,F가 많아지면 넘어가면 T에 한해서 Na 처리를 합니다.

    > sub[c(T,F,T,F,T,F,T)]
    [1] "a" "c" "e" NA 

    인덱싱 이용

    벡터가 문자열일 때

    벡터는 모두 보이지 않지만 인덱싱이 매겨져 있습니다.
    이를 이용해 데이터를 불러올 수 있습니다. 입력한 인덱싱대로 출력됩니다.
    참고로 파이썬은 0에서 인덱싱이 시작하지만 R은 1부터 인덱싱이 시작됩니다.

    > sub[c(3,2,1)]
    [1] "c" "b" "a"

    음수의 개념도 파이썬과 다른데 인덱싱의 경우 음수를 취하면
    그 인덱싱을 제외한 나머지를 불러오게 됩니다.

    > sub[c(-1,-2)]
    [1] "c" "d" "e"

    1,2 인덱싱에 해당하는 a,b를 제외한 나머지가 불러왔습니다.

    음수를 쓸 때는 조심해야 할 것은 양수와 섞어 쓰면 안됩니다.

    sub[c(-1,2)]

    인덱싱 범위가 넘어가면 NA처리를 합니다.

    > sub[c(6)]
    [1] NA

     

    벡터가 숫자형일때

    벡터가 숫자형일 때는 인덱싱 다루는 방법이 다채로워집니다.

    • vector[n] : n번째 원소 출력
    • vector[-n] : n번째 원소를 제외한 나머지 출력
    • vector[조건문] : 조건문을 만족하는 원소 출력
    • vector[a:b] : a~b까지 원소 출력
    > vector = c(2,4,6,8,10,12)
    
    > vector[3]
    [1] 6
    
    > vector[-2]
    [1]  2  6  8 10 12
    
    > vector[vector>5]
    [1]  6  8 10 12
    
    > vector[3:5]
    [1]  6  8 10

     

    key(이름)을 이용한 불러오기

    이름을 지정해 불러오기를 해보겠습니다.
    이름도 변수 선언에 해당합니다.
    숫자를 맨 앞에 쓰면 안 됩니다.
    변수 선언에 대한 자세한 내용은 해당 포스팅에서 확인해보시기 바랍니다.
    https://seong6496.tistory.com/264

    [R 변수선언 방법

    프로그래밍은 변수 선언이 필수인데요. R에서도 변수 선언을 합니다. 그리고 R만의 변수 생성 규칙이 있습니다. 물론 프로그래밍 언어에 익숙하다면 당연한 얘기이긴 합니다. 변수 생성 규칙을

    seong6496.tistory.com](https://seong6496.tistory.com/264)

    다음과 같이 key-value 형식으로 벡터를 만들었습니다.

    subs_name = c(a='k',b='kk',c='kkk',d='kkkk')

    key로 1,3번째 데이터를 불러보겠습니다.

    subs_name[c('a','c')]

    데이터만 출력하기

    앞에서는 모두 벡터형식으로 불러왔습니다.
    하지만 이중대괄호를 쓴다면 데이터만 출력할 수 있습니다.
    단, 데이터 1개씩만 불러올 수 있습니다.
    인덱싱이든 key든 상관없이 가능합니다.

    > subs_name[['a']] # subs_name[[1]]
    [1] "k"

    두개 이상을 불러오려고 하면 오류가 발생합니다.

    subs_name[[c('a','b')]]

    마치며

    R의 벡터에 대해 알아보았습니다.
    파이썬과는 약간 다른 방식도 있습니다.
    데이터만 출력할 때 한개씩밖에 안 되는 불편함이 있긴 하지만
    너무 어려워서 못 쓸 정도는 아닌 것 같습니다.
    그럭저럭 쓸만하네요

    관련 포스팅
    R 변수선언 방법

    R 데이터 타입 소개(종류, 타입확인)

    [R] 벡터 다루기(내장함수와 연산)

    'R' 카테고리의 다른 글

    [R] 벡터 다루기(내장함수와 연산)  (0) 2022.04.28
    [R] 연산자 모음  (0) 2022.04.26
    R 데이터 타입 소개(종류, 타입확인)  (0) 2022.04.16
    R 변수선언 방법  (0) 2022.04.15
    rstudio 패키지 설치 및 관리(googledrive 연동)  (0) 2022.04.13

    댓글

    Designed by JB FACTORY

    ....