5. 자료 구조(Data Structure)


r

Overview

R에서 제공하는 자료 구조(Data structure)는 메모리에 어떤 식으로 배정이 되고, 배정된 기억 공간에 자료가 어떻게 저장되어 있는가에 따라 분류된다.

자료 구조를 유형별로 살펴보고 해당 자료 구조를 만들 수 있는 함수와 자료를 처리해주는 함수를 통해 자료 구조의 특성을 알아본다.


R에서 제공되는 주요 자료 구조

자료 형태차원자료 유형복수 데이터 유형
적용 여부
Vector1차원수치/문자/복소수/논리불가
Matrix2차원수치/문자/복소수/논리불가
Data Frame2차원수치/문자/복소수/논리가능
Array2차원 이상수치/문자/복소수/논리불가
Factor1차원수치/문자불가
Time Series2차원수치/문자/복소수/논리불가
List2차원 이상수치/문자/복소수/논리
함수/표현식/call등
가능

데이터의 개수 및 차원에 따른 분류

  • 단일형 자료형 : 1종류의 데이터 타입을 저장할 수 있는 자료형
  • 다중형 자료형 : 여러 타입의 데이터로 구성할 수 있는 자료형
구분1차원2차원다차원
단일형VectorMatrix(행렬)Array(배열)
다중형ListDataFrame-

Vector

벡터는 타 프로그램에서 사용하는 배열의 개념과 동일하고, R에서 가장 기초가 되는 자료 구조이다.

한 가지의 데이터 타입(숫자, 문자열 등)만 저장할 수 있고 연속된 선형 구조의 형태로 만들어지며, index에 의해서 접근이 가능하다.

특징

  • 1차원의 선형 자료 형태
  • 자료는 data_name[index] 형태로 접근이 가능 (index는 1부터 시작)
  • 동일한 타입의 자료 형태만 저장 가능
  • 벡터의 생성 함수 : c(), seq(), rep()
  • 벡터 자료 처리 함수 : union(), setdiff(), intersect()
  • Slicing

벡터 관련 연산자

두 개의 벡터 xy간 산술 연산은 길이가 동일해야 한다.

연산자설명
+벡터 요소간 더하기 연산 수행
*벡터 요소간 곱하기 연산 수행
==벡터 요소간 비교 연산 수행
%*%요소들간 곱셈을 연산하여 누적 합을 구함. 결과는 행렬
c(x, y)벡터 x와 y의 요소를 합쳐 새로운 벡터 생성

Matrix

R의 행렬은 수학 시간에 배운 행렬의 정의와 같이 행과 열의 수가 지정된 구조이다. 행렬(Matrix) 자료 구조는 동일한 자료형을 갖는 2차원의 배열 구조를 갖는다. 따라서 모든 요소가 숫자인 행렬은 가능하지만, ‘1열은 숫자, 2열은 문자열’과 같은 형태는 불가능하다.

특징

  • 행과 열의 2차원 배열 구조의 객체를 생성
  • 동일한 타입의 데이터만 저장 가능
  • 행렬 생성 함수 : matrix(), cbind(), rbind()
  • 행렬 자료 처리 함수 : apply()

matrix() 함수의 사용

사용형식 : matrix(c(1:10), nrow = 2)

매개변수설명
data행렬을 생성할 데이터 벡터
nrow행의 수
ncol열의 수
byrowTRUE로 설정하면 행 우선으로 데이터가 채워짐
FALSE : 열우선
dimnames행렬의 각 차원에 부여할 이름을 설정
list 형식

col, row 병합 함수

rbind()cbind() 함수는 각각 행 또는 열 형태로 주어진 벡터, 행렬, 데이터 프레임을 합친 결과로 행렬 또는 데이터 프레임을 만드는 데 사용하는 함수

  • rbind(…) : 지정한 데이터들을 row로 취급하여 병합
  • cbind(…) : 지정한 데이터들을 col로 취급하여 병합

List

리스트는 서로 다른 자료 구조들을 중첩시켜서 만드는 자료 구조이다.

기본 자료형 뿐만 아니라, 벡터, 행렬, 리스트, 데이터 프레임 등을 사용할 수 있다.

리스트는 다른 타입의 원소들(리스트도 포함 가능)을 포함할 수 있다.

1차원 배열이면서 키와 값의 형태의 데이터를 담는 연관 배열(Associative Array)로 사용될 수 있다.

특징

  • Key, Value 쌍을 갖는 자료 구조
  • 벡터, 행렬, DataFrame, Array 등의 중첩 구조로 객체를 만들 수 있음
  • 동일한 타입이 아니여도 상관 없음
  • Indexing과 Key 값을 통해 데이터에 접근할 수 있음
  • unlist() 함수를 통해 리스트 형식의 자료를 벡터 형식으로 변환할 수 있음

사용 형식 : list(key1=value1, key2=value2, ...)

문법의미
list$keylist에서 key의 값을 읽음
list['key']list에서 key의 값을 읽음
list[idx]list에서 idx번째 데이터의 서브 리스트
list[[idx]]list에서 idx번째 데이터에 저장된 값을 읽음

2개 이상의 요소를 갖는 리스트

num <- list(c(1:5), c(6:10))
num

결과

[[1]]
[1] 1 2 3 4 5

[[2]]
[1]  6  7  8  9 10

Key, Value를 가지는 리스트 생성

member <- list(name='이순신', age=10, address='공덕동', gender='남자')
member

# 각 키에 접근하고자 할때는 달러 기호를 사용
member$name

결과

$name
[1] "이순신"

$age
[1] 10

$address
[1] "공덕동"

$gender
[1] "남자"

# 각 키에 접근하고자 할때는 달러 기호를 사용
[1] "이순신"

DataFrame

데이터 프레임은 엑셀의 스프레드 시트와 같이 표 형태로 정리한 모양을 하고 있다.

데이터 프레임은 R에서 가장 많이 사용되는 자료 구조이다.

사용 형식 : data.frame(col1=data1, col2=data2, ...)

데이터 프레임에 대해서는 이 문서에서 자세히 다룬다.




© 2019. by RaP0d

Powered by aiden