728x90

Review
참고 포스팅 : 2020/05/13 - [R Programming/Basics] - [R] R의 자료구조 1 - 변수, 스칼라 + 데이터 타입(Data Type) 맛보기

[R] R의 자료구조 1 - 변수, 스칼라 + 데이터 타입(Data Type) 맛보기

Review 참고 포스팅 : RStudio 시작 - R Projects 정의, 작업공간 설정(getwd, setwd), 저장 등 https://datalabbit.tistory.com/9 [R] RStudio 시작 - R Projects 정의, 작업공간 설정(getwd, setwd), 저장 등 안..

datalabbit.tistory.com


안녕하십니까, 간토끼입니다.

지난 시간에는 R의 기본적인 자료 구조에 대해서 다뤄봤습니다.

변수를 정의하는 것부터 시작해서 스칼라 변수를 다뤄보고, 각종 데이터 타입에 대해서 알아보는 시간을 가졌습니다.

저번 포스팅에 이어 잠깐 첨언을 하자면, 데이터 타입과 관련한 함수가 있는데요.
- 데이터 타입 변환 함수 : as.(데이터타입)(데이터) => 데이터의 타입을 바꿔주는 함수
- 데이터 타입 검사 함수 : is.(데이터타입)(데이터) => 데이터의 타입을 검사(확인)하는 함수
= TRUE or FALSE로 출력

예시를 한번 보면 이런 식으로 적용됩니다.
as.DataType 함수는 제법 유용하니 참고하세요.



이번에는 R의 자료 구조인 벡터, 행렬에 대해서 다뤄보도록 하겠습니다.

1. 벡터(Vector)
벡터를 어디서 들어봤을까요? 고등학교 때 이과였던 분들은 기하와벡터 시간에 들어보셨을텐데요.
수학에서 벡터는 벡터공간에서 정의되는 원소를 벡터라고 하죠?

R에서는 그런 수학적 의미보다도, 1차원 자료 구조를 벡터라고 부릅니다.

다만 예를 들어 A = (1, 2, 3, 4, 5) 와 B = (1, 3, 5, 2, 4) 라는 벡터를 정의한다면
두 벡터가 집합의 개념이라면 같은 집합이라고 볼 수 있지만,
원소의 순서가 바뀐 순간 아예 다른 객체가 되어버린다는 점에서 수학에서의 벡터의 의미와 다소 유사합니다.

R에서는 c( )라는 함수를 이용해 벡터를 정의합니다.

벡터 내 원소는 이전 포스팅에서 확인한 여러 자료형을 혼합해도 상관은 없습니다만... 굳이 그럴 일은 없겠죠?

벡터는 원소의 순서를 의미하는 인덱스를 통해 특정 위치의 원소를 쉽게 추출할 수 있습니다.
이때 인덱스를 나타내는 기호인 대괄호 [ ] 는 ,이후에도 정말 유용하게 쓰이며 벡터뿐만 아니라 행렬 및 데이터프레임에도 동일하게 쓰입니다.

벡터를 활용해 쓰이는 몇가지 함수입니다.

seq( ) 특정 수열을 이루고 있는 벡터를 만드는 함수
rep( ) 특정 원소를 일정 횟수만큼 반복하는 벡터를 만드는 함수
length( ) 벡터의 길이(원소의 개수)를 계산하는 함수

특히 length는 정말 유용하게 쓰이는 함수입니다.
나중에 반복문을 다룰 때 짚고 넘어갈게요.

2. 행렬(Matrix)
행렬입니다. 요즘 문과라면 배우지 못했을 .... (물론 저도 대학교 때 배웠습니다)
R은 통계 프로그래밍이다보니, 통계와 관련한 연산을 할 때 행렬을 다루실 수도 있겠는데요.
간단히 다루면 행렬은 2차원 자료구조입니다.
벡터가 여러개 겹쳐있는 꼴을 생각해보셔도 좋겠네요.

대충 요런 꼴을 행렬이라고 하죠?

1 3 4
2 5 7

이라는 행렬을 가정했을 때, 가로를 행 / 세로를 열 이라고 합니다. 그래서 행 렬
(1, 3, 4) 는 1행, (2, 5, 7)은 2행
(1,2)는 1열, (3, 5)는 2열, (4, 7)은 3열이 되고, 위 행렬을 2 X 3 행렬(Matrix)라고 합니다.

위 행렬을 R을 이용해 정의해봅시다.

matrix라는 함수를 이용해 c( '데이터') 로 원하는 데이터를 입력하고,
nrow = (행의 개수) or ncol = (열의 개수) 옵션을 이용해 행렬의 형태를 결정해줍니다.
행 또는 열의 개수를 특정하면 자연스럽게 다른 한 쪽의 개수도 특정이 되겠죠?

이때 matrix함수의 데이터 배치 순서는 기본적으로 열을 기준으로 배치됩니다.
즉 1열, 2열, 3열 ... 순으로 데이터를 각 위치에 집어넣는 것을 볼 수 있어요.

그러나 행을 기준으로 데이터를 넣고 싶다면, byrow = T 라는 옵션을 이용하면 됩니다.


근데 만약 내가 가진 데이터는 10개인데, row 또는 column의 개수를 4개로 설정하면 어떻게 될까요?
배수가 맞지 않아 행렬이 정의되지 않겠죠?
결론은 정의가 되긴 됩니다. 경고 메시지와 함께요.

(1,4)의 위치에 10을 집어넣고, (2,4), (3,4)는 데이터의 1번, 2번 위치가 들어간 걸 알 수 있어요.

이런식으로 Matrix는 정의됩니다.

벡터와 마찬가지로 인덱스를 이용해 특정 위치의 데이터를 조회할 수 있습니다.

원래 이번 포스팅에서 데이터프레임도 다룰 예정이었는데.... 데이터프레임은 이래 저래 다룰 파트가 많아서요.
다음 포스팅에서 깊게(?) 다뤄보겠습니다.

감사합니다.
잘 읽으셨다면 게시글 하단에 ♡(좋아요) 눌러주시면 감사하겠습니다 :)
(구독이면 더욱 좋습니다 ^_^)



- 간토끼(DataLabbit)
- University of Seoul
- Economics, Data Science

728x90

+ Recent posts