R에서는 데이터를 구성하는 방법에 따라 그 구조(Sturucture)가 달라지며, 이러한 구조에 따라 사용하는 함수가 달라집니다. 이러한 구조를 나누는 이유는 연산 속도와 컴퓨터 리소스를 효율적으로 사용하기 위함이므로, 데이터 구조에 대한 이해는 필수적으로 숙지하는 것이 좋습니다.  

 

10.1. 원소(element ; atomic, 원자) 

더보기

(1) 원소의 정의

원소는 데이터가 1개로 이루어진 1차원의 값을 의미합니다. R의 고전 객체 개념에서는 원자(atomic)라고도 정의하는데, 일반적으로 원소 혹은 스칼라라는 표현을 많이 사용합니다. 허나 스칼라는 선형대수에서 숫자로 이루어진 값을 의미하므로 해당 블로그에서는 원소라는 표현을 사용하겠습니다.   

 

(2) 예시

예를 들어 데이터 유형에 따라 다음의 객체를 생성해보겠습니다. 생성 결과 환경창을 확인해보면, 데이터 유형에 따라 값들이 표시되는 형식이 다름을 확인할 수 있습니다.

element_01 <- 8
element_02 <- "Data"
element_03 <- TRUE

 

10.2. 벡터(Vetor)

더보기

(1) 벡터의 정의

R에서 벡터는 동일한 데이터 유형의 원소를 모아둔 집합이라 정의할 수 있습니다. 벡터를 정의할 땐 c() 함수와 원소를 ,로 구분해 정의할 수 있습니다. 만약 벡터의 원소들의 데이터 유형이 다르다면, 해당 벡터의 데이터 유형은 한 가지로 선언됩니다.

 

(2) 예시

데이터 유형이 다른 원소들을 묶어 벡터로 정의했을 때 다음의 예를 들어보겠습니다.

vector_01 <- c(1, 3, 5, 7, 9)
vector_02 <- c("Data", "Analytics", "With", "R")
vector_03 <- c(1, 3, "a", 7, 9) #숫자형과 문자형이 섞인 벡터
vector_04 <- c(1, 3, TRUE)      #숫자형과 논리형이 섞인 벡터

환경창을 통해 확인해보면 벡터의 원소 유형과 길이를 확인할 수 있습니다. 또한 여기서 vector_03 객체의 데이터 유형이 문자형으로 변환됐음을 확인할 수 있습니다.  

 

10.3. 행렬(Matrix)

더보기

(1) 행렬의 정의

행렬은 행렬은 가로축인 행(row), 세로 축인 열(column)로 구성된 배열을 의미합니다. 좀 더 직관적으로 설명하면 여러 개의 벡터 묶음으로 볼 수 있으며, 행렬의 생성 조건은 다음과 같습니다.

 ①원소의 데이터 유형은 동일해야함 

 ②각 벡터들의 길이(차원)은 동일해야함 

 

(2) 행렬 생성 함수, matrix()

행렬을 정의하기 위해 사용하는 matrix() 함수의 구조와 주요 파라미터는 다음과 같습니다.

matrix(data, nrow, ncol, byrow, dimnames)
 
파라미터 설명
  data   행렬로 배열하고자 하는 벡터
  nrow   행의 수 설정
  ncol   열의 수 설정
  byrow   TRUE면 행 기준으로 원소 배치, FALSE면 열 기준으로 원소 배치
  dimnames   list() 함수로 행렬의 행, 열에 명칭 부여
 

nrow (혹은 ncol) 파라미터 하나만 정의되도 행렬은 자동으로 생성됩니다. 또한 R에서는 기본적으로 데이터 입력 순서가 열 기준으로 입력되는 특징이 있습니다. 만약 행 기준으로 데이터를 배열하고자 하면 byrow 파라미터를 이용하면 됩니다. 

 

(3) 예시

1부터 9까지의 원소 9개로 이루어진 matrix_01 객체에서 byrow=TRUE로 설정 후 생성하고자 하면 다음과 같습니다.

matrix_01 <- matrix(data=c(1, 2, 3, 4, 5, 6, 7, 8, 9),
                    nrow=3,
                    ncol=3,
                    byrow=TRUE)

 

10.4. 배열(Array)

더보기

(1) 배열의 정의

배열은 (데이터 사이언스 분야에 한해) 벡터∙행렬의 상위 개념으로써, 원소를 n개의 축(차원) 구조로 묶을 수 있는 데이터 구조입니다. 또한 3차원 구조의 배열을 텐서(Tensor)라고 정의하며, 행렬 구조(2차원 배열)를 n개의 층으로 쌓아둔 것으로 표현할 수 있습니다. 이를 그림으로 표현하면 다음과 같습니다.

출처 : https://ko.wikipedia.org/wiki/%ED%85%90%EC%84%9C

 

(2) 배열 생성 함수, array()

배열은 array() 함수를 통해 정의되는데, 구조는 다음과 같습니다. dim 파라미터에 따라 배열은 벡터, 행렬, 텐서 혹은 그 이상으로 정의됩니다.

array(data, dim, dimnames)
 
파라미터 설명
  data   배열로 정의하고자 하는 벡터
  dim   배열의 행, 열, 차원 지정
  dimnames   list() 함수로 배열의 행, 열, 차원에 명칭 부여

 

(3) 예시

숫자형 원소 6개로 2개의 행 · 3개의 열 · 2개의 층으로 구성된 array_01 객체를 생성하면 다음과 같습니다.

array_01 <- array(data=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                  dim=c(2, 3, 2))

 

10.5. 데이터 프레임(Data Frame)

더보기

(1) 데이터 프레임의 정의

데이터 프레임은 일반적으로 통용되는 표(table)라고 볼 수 있습니다. R에서 정의되는 대부분의 데이터셋은 데이터 프레임 구조로 정의됩니다. 또한 행렬의 경우 모든 원소의 데이터 유형을 통일시켰던 것과는 달리 열 기준으로 데이터 유형을 통일합니다.  

 

(2) 데이터 프레임 생성 함수, data.frame()

데이터 프레임은 data.frame() 함수를 이용해 정의할 수 있습니다. 다른 함수와는 다르게 data.frame() 함수는 이름 중간에 .을 입력합니다. 해당 함수의 구조와 주요 파라미터는 다음과 같습니다.

data.frame(⋅⋅⋅ , row.names, stringsAsFactors, ∙∙∙ )
 
파라미터 설명
  ···   "열이름=벡터" 구조로 데이터 입력
  row.names   행 이름 설정
  stringsAsFactors   TRUE면 문자형 벡터들을 팩터화, FALSE면 문자화

 

(3) 예시

어떤 학교에서 5명의 학생의 이름, 성별 국어, 수학, 시험통과 유무를 기록한 student_df 객체을 생성하면 다음과 같습니다.

student_df <- data.frame(
  name      = c("PSH", "CGE", "CSH", "CMJ", "CJH"),
  gender    = factor(c("m", "f", "m", "f", "m")),
  korean    = c(35, 92.5, 70,85, 60),
  math      = c(65L, 80L, 88L, 67L, 28L),
  test_pass = c(FALSE, TRUE, TRUE, TRUE, FALSE)
)

 

10.6. 리스트(List)

더보기

(1) 리스트의 정의

리스트는 원소, 벡터, 행렬, 데이터 프레임, 배열과 같은 모든 데이터 구조와 함수를 한 객체로 정의할 수 있는 묶음입니다. 저장할 각 객체는 서로 길이와 데이터 유형을 상관하지 않습니다. 리스트를 생성할 땐 list() 함수를 통해 정의할 수 있습니다.

 

(2) 예시

이번 게시글에서 사용했던 예시들을 한 데 묶는 list_01 객체를 생성해 보겠습니다.

list_01 <- list(
  element_01 = element_01,
  vector_01  = vector_01,
  matrix_01  = matrix_01,
  array_01   = array_01,
  student_df = student_df
)