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

반응형
    반응형

    R 데이터 타입

    R의 데이터 타입 내용입니다.
    R의 데이터 타입 종류와 확인방법에 대해 포스팅하려고 합니다.
    각각을 모두 다 설명할 수는 없고 어떤 게 있는지에 초점을 맞췄습니다.

    R은 1,2,n차원 자료로 이루어져 있습니다.
    차원마다 특징이 있고 그 특징을 잘 아는 것이 중요합니다. 어떤 데이터 타입인지 명확해야만 고급기법을 사용할 때 유용하기 때문이죠.

    R의 데이터 기본 타입은 숫자형(numeric), 문자형(chararcter), 논리형(logical) 으로 구분됩니다.
    데이터 타입 유형을 표로 정리하면 다음과 같습니다.

    유형 설명
    숫자형(numeric) 정수(integer),실수(double)를 저장하는 객체 형식
    문자형(character) 문자나 문자열을 저장하는 객체 형식
    논리형(logical) 논리값 TRUE,FALSE를 저장하는 객체 형식R에서는 대문자 T,F 입력시 TRUE,FALSE로 인식

     

    실제로 타입이 어떻게 나오는 확인해보겠습니다.
    확인에 앞서 R에서 타입을 확인하는 함수는 typeofmode가 있습니다.
    함수의 역할이 약간 다른데 예를 보면서 확인하면 될 것 같습니다.

    # 숫자형
    > mode(5)
    [1] "numeric"   #숫자형
    > typeof(5)
    [1] "double"    #실수형
    > typeof(5L)
    [1] "integer"   #정수형

    예와 같이 mode 함수는 숫자형,문자형,논리형에 대한 정의만 내려줍니다.
    typeof 함수는 숫자형 중에서 실수형,정수형 인지를 알려줍니다.
    또한, 정수형을 만들려면 숫자옆에 대문자 L을 붙여줍니다.

    모든 실수가 되는 게 아니고 정수형이 가능한 숫자만 가능합니다.
    소수를 정수형으로 바꾸려 하면 다음과 같은 오류가 뜹니다.

    >mode(5.1L)

    문자형이나 논리형은 mode나 typeof 상관없이 똑같은 결과가 나옵니다.

    # 문자형
    > mode('a')
    [1] "character"
    > typeof('a')
    [1] "character"
    # 논리형
    > mode(TRUE)  # or mode(T)
    [1] "logical"
    > typeof(TRUE) # or typeof(T)
    [1] "logical"

     

    1차원 자료

    R은 벡터를 기본으로 합니다.
    벡터는 1차원 구조로써 하나의 원소로 이루어진 원자 벡터는 숫자형(numeric), 문자형(chararcter), 논리형(logical) 으로 타입이 구분됩니다.
    1차원 데이터를 다룰 때 반드시 기억해야할 것은 원자 벡터는 항상 단 하나의 구조형만을 따른다는 것입니다. 이게 굉장히 중요한데 여러형의 데이터를 한 벡터에 묶어놓으면 벡터의 데이터타입은 단 하나로 강제로 바뀔 수 있음을 암시합니다.

    다양한 데이터타입을 넣어야 할 때는 어떻게 해야할까요?
    이런 경우 리스트를 사용하면 됩니다.
    리스트는 1차원 다중자료형으로 다양한 데이터타입을 묶을 수 있습니다.

    1차원 자료에서 벡터를 만들려면 c함수를 이용하고 리스트는 list함수를 이용합니다.

    vector1 = c(1,2,3,4)            #벡터
    list1 = list(1,'1','a',T)    #리스트

    강제형변환

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

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

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

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

    ex) c(1,T,F,TRUE) -> 숫자형으로 인식
    c("문자",1,-1) -> 문자형으로 인식

    논리형인 경우는 숫자형으로 바뀔시 TRUE는 1, FALSE는 0으로 인식합니다.

    > vector1=c(1,2,3,4)
    > vector2=c(1,T,F,TRUE)
    > vector1+vector2
    [1] 2 3 3 5

     

    리스트

    리스트는 강제형변환이 일어나지 않습니다.
    다양한 타입을 그대로 보존할 수 있습니다.
    애초에 리스트는 리스트라는 타입으로 정의됩니다.

    > list1 = list(1,2,3,4)
    > typeof(list1)
    [1] "list"

    각각의 타입은 str함수로 확인할 수 있습니다.

    str(list1)

    리스트는 다뤄야 할 게 조금 더 있어서 추후 따로 포스팅을 하겠습니다.

     

    2차원 자료

    행렬

    행렬은 행(row)와 열(column)으로 구성된 2차원 벡터입니다.
    R에서는 행렬을 벡터로 여기기 때문에 마찬가지로 한가지 타입만 저장할 수 있습니다.
    2차원 자료다 보니 파라미터가 존재합니다.

    matrix(data,nrow,ncol,byrow,dimnames)

    • data : 행렬에 저장할 데이터(벡터형식이어야함)
    • nrow : 행의 개수(디폴트 :1)
    • ncol : 열의 개수(디폴트 : 1)
    • byrow : 데이터입력순서(디폴트 FALSE : 열 기준 입력)
    • dimnames : 행과 열의 이름 리스트

    1~10까지의 벡터를 만들어 row가 5인 행렬을 만들어보면 다음과 같습니다.

    nv1 = 1:10
    mat_1 = matrix(nv1,nrow=5)
    mat_1

    2차원부터는 typeof로 확인을 하면 matrix가 아니라 기본 데이터 타입으로 표기됩니다.
    현재 matrix는 integer로 되어있으므로 typeof를 하면 integer로 뜹니다.

    > typeof(mat_1)
    [1] "integer"
    > mode(mat_1)
    [1] "numeric"

    좀 더 종합적인 구조를 보려면 str함수를 사용합니다.

    > str(mat_1)
     int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10

    5 row의 2 column 구조로 1~10까지로 되어있는 것을 알 수 있습니다.

     

    데이터프레임

    데이터프레임은 R에서 가장 많이 쓰이는 데이터 타입인데요.
    거의 모든 데이터가 데이터프레임의 구조를 가지고 있나라고 생각할 수 있을 정도로 많이 쓰입니다
    행렬과 마찬가지로 행(row)과 열(column)로 되어있지만 행렬과는 다르게 다양한 타입을 함께 쓸 수 있습니다.
    생성은 다음과 같이 간단합니다.

    data.frame(변수명1=벡터1,...)

    name = c("은정","영미","철수","철민")
    la = c(15,14,16,13)
    data_ = data.frame(이름 = name,나이 = la)
    data_

    mode와 typeof를 적용하면 리스트로써 나옵니다.

    > typeof(data_)
    [1] "list"
    > mode(data_)
    [1] "list"

     

    행렬과 마찬가지로 str를 통해서 전체 구조를 살펴볼 수 있습니다.

    str(data_)

     

    n차원 자료(배열)

    3차원 이상의 다차원 데이터를 배열(array)라고 합니다.

    array(data,dim,dimnames)
    간단한 3차원 데이터를 만들어보겠습니다.

    xn = c('1행','2행')
    yn = c('1열','2열')
    zn = c('1차원','2차원')
    array_ = array(1:8,dim=c(2,2,2),dimnames=list(xn,yn,zn))
    array_

    1차원,2차원에 각각 2x2 행렬이 나타나 총 3차원의 배열을 만들었습니다.

    팩터(factor)

    factor는 R에만 있는 특이한 데이터 타입입니다.
    범주형 데이터를 표현하기 위해 만들어진 타입인데 특이합니다.
    범주형은 순서나 명목을 정하는 것인데 이를 떠올리면서 factor를 보면 어떤 것인지 이해가 갈 겁니다.
    간단히 소개만 하고 추후에 따로 포스팅을 만들어 자세하게 다루도록 하죠.

    fct = factor(c("a","b","c","a","b"))
    fct

    factor를 하나 만들었습니다.
    Levels 라는 것이 생성되었습니다.
    마치 a,b,c라는 카테고리로 나눠진것같다라는 느낌이 든다면 factor를 거의 이해한 거라 봐도 무방합니다. 

    그걸 위해서 만들었으니깐요.
    실제로 str를 통해 살펴보면 임의로 R에서 a,b,c로 나누었다는 것을 느낄 수 있습니다.

    str(fct)

    typeof로 살펴보면 "integer"로 되어있습니다.

    > typeof(fct)
    [1] "integer"

    아무튼 이런 느낌입니다.

     

    마치며

    R에 데이터 타입에 대해서 소개했습니다.
    다루는 기술이나 여러가지 면에서는 부족한 글이지만 적어도 R로 무엇을 만들고 다룰 수 있는지 알 수 있을 것 같네요.
    각각의 데이터 타입에 대한 자세한 내용은 추후에 따로 포스팅을 해서 덧붙이도록 하겠습니다.


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

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

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

    [R] 리스트(list)

    [R] 행렬(matrix) 다루기

    [R] 데이터 프레임 다루기

     

    'R' 카테고리의 다른 글

    [R] 연산자 모음  (0) 2022.04.26
    [R] 벡터 다루기(입출력)  (0) 2022.04.18
    R 변수선언 방법  (0) 2022.04.15
    rstudio 패키지 설치 및 관리(googledrive 연동)  (0) 2022.04.13
    R studio github 연동  (0) 2022.04.09

    댓글

    Designed by JB FACTORY

    ....