본문 바로가기
R

[R] 데이터 구조 (벡터, 요인, 행렬, 배열, 데이터프레임, 리스트)

by JKyun 2017. 1. 25.

안녕하세요! 우주신입니다.



오늘은 R 데이터 구조에 대해 배워보겠습니다.


정말 중요한 부분입니다. 지금 잘 짚고 넘어가지 않는다면, 나중에 머리털 다 빠집니다.


이론적으로 한번 보시고, 꼭 직접 해보시길 부탁드립니다.




R 데이터 구조는 1. 벡터 2. 요인 3. 행렬 4. 배열 5. 데이터프레임 6. 리스트로 나뉩니다.


찬찬히 하나씩 보겠습니다.




1. 백터 (Vector)




앞 시간에서 잠시 언급했지만 벡터는 동일한 유형의 데이터로 구성되어 있는 1차원 데이터 구조입니다.

숫자형은 숫자형끼리, 문자형은 문자형끼리, 논리형은 논리형끼리.



2. 요인 (Factor)

 



요인형은 범주형의 데이터 입니다.

( 1, 2, 3은 숫자이지만, 첫번째, 두번째, 세번째는 범주형이다 )


범주형으로 만들기 위해선 먼저, 범주 카테고리를 문자로 입력합니다.

위에서는 A, B, C로 구성된 벡터를 만들었습니다.


그 후, factor() 함수를 통해 범주형으로 바꿔줍니다.

F2 출력 결과를 보면 Levels: A B C를 확인할 수 있는데

이는 범주가 A, B, C 총 3개로 이루어져있다는 뜻 입니다.



3. 행렬 (Matrix)



행렬은 익숙하죠?

동일한 유형의 2차원 데이터 구조입니다.


matrix() 함수를 이용해서 만드는데,

위 첫번째 코드를 보면 matrix(1:12, nrow=3)

"1부터 12까지의 숫자를 행(row)의 수가 3개인 행렬로 만들어라"

로 해석하면 됩니다.


두번째 코드를 보면 byrow = TRUE가 추가되었는데, 이는 행(row)기준으로 숫자를 나열해라 라는 뜻입니다.

첫번째 행렬과 비교해보시기 바랍니다.




4. 배열 (Array)



쉽게 말해, 2차원 데이터 구조인 행렬의 조건에 2차원 이상 데이터 구조로 업그레이드 된 데이터 구조입니다.

array() 함수를 이용.


array(1:12, c(2, 3, 2))

"1부터 12 숫자를 '2x3'행렬로 2층으로 만들어라"

로 해석하면 됩니다.



4. 데이터프레임 (DataFrame)


아주 강력한 데이터 구조입니다. 

앞선 데이터 구조들과는 달리 데이터 유형에 상관없이 2차원 형태의 데이터 구조를 생성합니다.


위 코드를 보면 숫자형 d1과 문자형 d2를

data.frame() 함수를 통해 데이터프레임을 생성했습니다.



5. 리스트 (List)



리스트는 끝판왕 입니다.

백터, 행렬, 배열, 데이터프레임과 같은 다른 데이터 구조를 모두 묶을 수 있습니다.

앞선 모든 데이터를 list() 함수를 통해 L1을 생성 후, 출력한 결과 입니다.




TIP> 데이터 구조가 궁금할 땐


is.vector()

is.matrix()

is.array()

is.data.frame()

is.list()

함수들을 사용.



앞선 D3는 데이터프레임이므로 is.matrix(D3)는 FALSE 값이 나온다.






끝.


다음 시간에는  벡터(Vector)에 대해 더 자세히 배워보겠습니다.


수고하셨습니다.


댓글3

  • ♥30.Elen 2019.03.06 19:26 신고

    좋은 자료 감사합니다. 정보 통계학과 공부를 시작하게 되었는데 편입이라 R을 못 배우고 넘어와서 정말 올려주신 내용들이 저에게 도움이 많이 되고 있습니다. 앞으로 자주 이용하면서 도움 많이 받을 거 같아서 댓글 남기고 가는 게 예의인 것 같다는 생각이 들더라고요! 다시 한번 감사드리고, 복 받으실거에요! ^^
    답글

    • JKyun 2019.03.07 01:50 신고

      감사합니다. 요새 바빠 글 못 올리고 있는데.. 시간 나면 또 올릴게요. (저도 블로그 구경 잘 했습니다~)

  • 덕담 2021.02.03 22:11

    R 초보입니다. 여러 서적들을 보고 나서도 개념이 혼돈이 왔는데 이제서야 정리가 되네요.
    우주신님 덕분에 R 포기하려던 마음을 다잡습니다. 감사합니다.
    복 많이 받으세요.
    답글