본문 바로가기
PROGRAMMING/CODING

[R] 기초 1편. 데이터 타입부터 구조까지 한 번에 정리하기

by Hey Nary 2025. 8. 5.
728x90
반응형

 

통계나 데이터 분석을 공부하다 보면 반드시 만나게 되는 프로그래밍 언어가 있다. 바로 "R"이다.
R은 통계 계산, 시각화, 모델링 등 수치 기반 분석을 위해 설계된 언어로, 학계와 실무 모두에서 여전히 널리 쓰인다.

이번 글에서는 R을 처음 접하는 사람들을 위해 다음 세 가지를 중심으로 소개한다.

  1. R의 데이터 타입
  2. R의 기본 문법 (연산자)
  3. R의 주요 데이터 구조 (벡터, 행렬, 배열, 리스트, 데이터프레임)

1. R의 데이터 타입

R에서 데이터를 다룰 때 가장 먼저 이해해야 할 개념이 "데이터 타입"이다. R의 기본 데이터 타입은 다음과 같다.

타입 설명 예시
numeric 숫자형 (실수 포함) 3, 3.14
integer 정수형 10L (L을 붙여야 정수로 인식)
character 문자열 "hello", "R"
logical 논리형 (TRUE/FALSE) TRUE, FALSE
complex 복소수형 1+2i

특수 타입

NA 결측값 (Not Available), 데이터가 있지만 비어 있음
NaN 수학적으로 정의되지 않은 값 (Not a Number)
NULL 아예 존재하지 않음 (길이 0), 변수 자체가 비어 있음

타입을 확인할 땐 class() 또는 typeof() 함수를 사용하면 된다.

x <- 3.14 class(x) # "numeric" typeof(x) # "double"

2. R의 기본 문법: 연산자

R은 수학적/논리적 연산을 매우 직관적으로 지원한다.

산술 연산자

덧셈 + 2 + 3
뺄셈 - 5 - 1
곱셈 * 4 * 2
나눗셈 / 6 / 3
거듭제곱 ^ 2^3 → 8
나머지 %% 7 %% 3 → 1
정수 몫 %/% 7 %/% 3 → 2
 

 

비교 연산자

     
같음 == 값이 같은지 비교
다름 != 값이 다른지 비교
크기 비교 <, >, <=, >= 크기 비교
타입 확인
(모든 데이터타입에 쓸 수 있음)
is.numeric(x) 숫자형인지
is.na(x) NA인지
is.null(x) NULL인지
 

 

대입 연산자

R에서는 변수를 정의할 때 다음과 같은 기호를 사용할 수 있다

<- 가장 일반적인 대입 방법 x <- 5
= 함수 인자 또는 변수 대입 y = 10
<<- 지역 환경 바깥 변수에 할당 전역 <<- 100
 

일반적으로 <-을 가장 많이 사용하며, <<-은 함수 내부에서 외부 환경의 변수를 수정할 때 쓰인다.


기타 연산자

%in% 포함 여부 검사 "a" %in% c("a", "b") → TRUE
& 논리 AND  TRUE & FALSE → FALSE
| 논리 OR TRUE & FALSE → TRUE
" 하나라도 TRUE이면 전체가 TRUE"
! 논리 NOT !TRUE → FALSE
 

3. R의 데이터 구조

(1) 벡터 (Vector)

  • 가장 기본적인 데이터 구조, 1차원
  • 같은 타입의 값만 저장할 수 있음
  • 생성: c(1, 2, 3), c("a", "b", "c")
v <- c(3, TRUE, FALSE) #c : concatenate의 c로, 데이터를 묶을 수 있다.
## 출력 : 3 1 0

v1 <- c(1:6)
## 출력 : 1 2 3 4 5 6

 

(2) 행렬 (Matrix)

  • 2차원 구조이며, 모든 요소는 같은 타입이어야 함 (그렇지 않으면 자동으로 타입이 변환됨)
  • 생성 시 matrix() 함수 사용
m <- matrix(1:6, nrow = 2, ncol = 3) #nrow, ncol 중 하나만 지정해도 된다.

##출력##
    [,1] [,2] [,3]
[1,]   1    3    5
[2,]   2    4    6
  • 기본적으로 값은 열(column)을 기준으로 채워진다
  • byrow = TRUE 옵션을 추가하면 행(row) 기준으로 채워진다.
m2 <- matrix(1:6, nrow=2, byrow=TRUE)

##출력##
    [,1] [,2] [,3]
[1,]   1    2    3
[2,]   4    5    6
  • 벡터를 행렬로 바꾸려면 dim()을 사용하여 차원을 지정할 수 있다.
v <- c(1:6)
dim(v) <- c(2, 3) # 2행 3열 행렬로 변환

##출력##
    [,1] [,2] [,3]
[1,]   1    3    5
[2,]   2    4    6

 

(3) 배열 (Array)

  • 3차원 이상을 다루는 자료 구조
  • array()를 이용해 생성할 수 있다.
  • dim 옵션을 지정하지 않으면 단순 벡터(1차원)로 처리된다.
a <- array(c(1:12), dim = c(2, 3, 2)) # 3차원 배열

##출력##
,   ,   1
    [,1] [,2] [,3]
[1,]   1    3    5
[2,]   2    4    6
,   ,   2
[,1] [,2] [,3]
[1,]   7    9   11
[2,]   8   10   12
 

(4) 리스트 (List)

  • 서로 다른 타입, 구조를 가진 데이터들을 묶을 수 있음
  • 벡터, 행렬, 배열, 숫자형, 문자열 등을 모두 포함 가능
lst <- list(
	num = 3.14, 
    vec = c(1, 2, 3), 
    mat = matrix(1:4, 2), 
    arr = array(1:8, dim = c(2, 2, 2)) 
)
  • 리스트의 각 요소는 $, [[ ]], [ ]로 접근 가능
 
mylist <- list(name = "Alice", age = 30)

mylist$name    # "Alice"
mylist$age     # 30
mylist[[1]]         # "Alice". R의 벡터는 시작 인덱스 값을 1로 갖는다.
mylist[["name"]]    # "Alice"
mylist[1]       # 리스트로 반환: list("Alice"). 결과가 다시 리스트 형태로 유지됨
mylist["name"]  # list("Alice")

(5) 데이터프레임 (Data Frame)

  • 2차원 구조를 갖는 관계형 데이터 구조
  • 행렬처럼 생겼지만, 열마다 다른 데이터 타입을 가질 수 있다
  • 각각의 열은 내부적으로 벡터로 구성됨
  • 특정 열 추출: df$name 또는 df[["name"]]
  • 행 접근: df[1, ], 열 접근: df[, 2]
df <- data.frame( name = c("Kim", "Lee"), age = c(22, 25), pass = c(TRUE, FALSE) )

마무리 요약표

구조 차원 타입 제약 특징
vector 1D 하나의 타입 가장 기본 단위
matrix 2D 하나의 타입 열 기준으로 채워짐 (행 기준: byrow=TRUE)
array nD 하나의 타입 다차원, dim()으로 지정
list 1D 여러 타입 가능 다양한 객체를 함께 저장 가능
data.frame 2D 열마다 타입 다름 관계형 데이터에 적합, 가장 많이 사용

 

728x90
반응형

댓글