프로그래밍 언어/R

03. R의 변수와 데이터 타입 및 구조 1️⃣ (변수와 데이터 타입, 팩터, 벡터)

ourkofe's story 2024. 8. 13. 23:01

변수와 데이터 타입은 R 프로그래밍의 가장 기본적인 개념입니다. 데이터를 저장하고 조작하기 위해서는 변수를 사용해야 하며, 각 변수는 특정한 데이터 타입을 가집니다. 데이터 타입을 정확히 이해하면, 데이터를 올바르게 처리하고 분석할 수 있습니다.


변수 할당 및 사용법


변수란 무엇인가?

변수는 데이터를 저장하는 공간으로 나중에 이 값을 사용하거나 조작할 수 있게 해줍니다. 변수에 값을 할당하면, R은 해당 값을 메모리에 저장하고 그 값을 참조할 수 있는 이름(변수명)을 부여합니다.

변수명은 사용자가 정의할 수 있으며, 변수에 값을 할당하는 방식은 다음과 같습니다.


변수 할당 방법

R에서 변수를 할당하는 방법은 두 가지가 있습니다:

  • 할당 연산자 <-: 가장 일반적인 변수 할당 방법입니다.
    • 예: x <- 10
    • 이 코드에서 숫자 10이 변수 x에 저장됩니다. 이후 x를 호출하면 10이 출력됩니다.
  • 할당 연산자 =: R에서도 사용할 수 있지만, <-가 더 일반적입니다.
    • 예: y = 20
    • 이 코드에서 숫자 20이 변수 y에 저장됩니다.
x <- 10
y <- "Hello"
z <- TRUE
a <- 10
b <- 20
# x, y, z는 각각 숫자, 문자열, 논리값을 저장하는 변수입니다.

변수명 규칙

  • 변수명은 알파벳 문자, 숫자, 밑줄(_), 점(.)으로 구성될 수 있습니다.
  • 변수명은 숫자로 시작할 수 없습니다.
  • 대소문자를 구별합니다. (myVar와 myvar는 다른 변수로 간주됩니다.)
  • 예약어는 변수명으로 사용할 수 없습니다 (예: if, else, TRUE, FALSE 등).

변수의 사용

변수에 저장된 값을 이용해 연산하거나, 다른 변수에 할당할 수 있습니다.

  • 예: c <- a + b
  • 이 경우, a와 b의 값을 더한 결과인 30이 변수 c에 저장됩니다.

R의 기본 데이터 타입


데이터 타입이란?

데이터 타입은 R에서 변수가 저장하는 데이터의 종류를 의미합니다. R은 다양한 데이터 타입을 제공하며, 변수는 다양한 데이터 타입을 가질 수 있습니다.


주요 데이터 타입

숫자형 (Numeric)

  • 실수형(Numeric) : 실수 값을 나타내는 데이터 타입입니다. 모든 숫자는 기본적으로 실수로 저장됩니다.
  • 정수형(Integer) : 정수 값을 나타내는 데이터 타입입니다. L을 접미사로 붙여 명시할 수 있습니다.

예시:

a <- 5.5  # 실수
b <- 2    # 실수로 저장
c <- 5L  # 정수
  • 확인 방법 : class(a) 또는 typeof(a)를 사용하면 numeric이라고 출력됩니다.

문자형 (Character)

문자열 값을 나타내는 데이터 타입입니다. 큰따옴표(") 또는 작은따옴표(')로 문자열을 감쌉니다.

 

예시:

str <- "Hello, R!"
name <- "Alice"
greeting <- "Hello, World!"
  • 확인 방법 : class(name) 또는 typeof(name)를 사용하면 character라고 출력됩니다.

논리형 (Logical)

TRUE 또는 FALSE 값을 저장하는 타입으로, 주로 조건문에서 사용됩니다.

 

예시:

is_valid <- TRUE
is_false <- FALSE
is_greater <- 5 > 3    # TRUE 반환
  • 확인 방법 : class(is_valid) 또는 typeof(is_valid)를 사용하면 logical이라고 출력됩니다.

복소수형 (Complex)

복소수를 표현하는 데이터 타입입니다. 실수부와 허수부로 구성됩니다.

 

예시:

comp <- 3 + 2i

팩터 (Factor)

팩터(Factor)는 R에서 범주형 데이터를 표현하기 위한 특별한 데이터 타입입니다. 범주형 데이터는 여러 고정된 범주(Category) 중 하나로 값이 표현되는 데이터를 의미하며, 팩터는 이러한 범주형 데이터를 효율적으로 다루기 위해 설계되었습니다.

팩터의 특징

  • 범주형 데이터 표현: 팩터는 범주형 데이터를 표현하기 위한 데이터 타입입니다. 예를 들어, 성별(남성, 여성), 날씨(맑음, 흐림, 비)와 같은 고정된 범주를 가진 데이터는 팩터로 표현됩니다.
  • 레벨(Level): 팩터는 고정된 범주를 레벨이라고 부르며, 팩터의 각 값은 이 레벨 중 하나에 속합니다. 팩터는 이 레벨을 이용해 데이터를 인코딩하고 처리합니다.
  • 숫자 인코딩: 팩터는 내부적으로 각 범주를 숫자로 인코딩하여 메모리 사용을 최적화합니다. 예를 들어, "남성"과 "여성"이라는 두 개의 레벨을 가진 팩터는 "남성"을 1, "여성"을 2로 인코딩할 수 있습니다. 이로 인해 범주형 데이터를 효율적으로 메모리에 저장하고 처리할 수 있습니다.
  • 순서: 팩터는 순서가 없는 범주형 데이터(명목형 데이터)와 순서가 있는 범주형 데이터(서열형 데이터)를 표현할 수 있습니다.

팩터의 생성

팩터는 factor() 함수를 사용하여 생성합니다.

# 예시 1: 순서가 없는 범주형 데이터 (명목형 데이터)로써 성별 데이터 생성
gender <- factor(c("male", "female", "female", "male"))
print(gender)
# 출력: [1] male   female female male  
# Levels: female male
# gender는 "male"과 "female"이라는 두 가지 레벨을 가지는 팩터입니다.

# 예시 2: 순서가 있는 범주형 데이터 (서열형 데이터)
education <- factor(c("highschool", "college", "graduate", "college"),
                    levels = c("highschool", "college", "graduate"),
                    ordered = TRUE)
print(education)
# 출력: [1] highschool college    graduate   college   
# Levels: highschool < college < graduate

팩터의 속성

  • 레벨(Levels): 팩터의 범주를 레벨이라고 합니다. levels() 함수를 사용하여 팩터의 레벨을 확인할 수 있습니다.
  • 레벨 변경: levels() 함수를 사용하여 팩터의 레벨 이름을 변경할 수 있습니다.
  • 순서 있는 팩터: 팩터는 순서가 있는 범주형 데이터(서열형 데이터)도 표현할 수 있습니다. 이를 위해 ordered = TRUE 옵션을 사용합니다.
  • 순서: 순서가 있는 팩터(서열형 데이터)인지 여부는 is.ordered() 함수를 사용하여 확인할 수 있습니다.
levels(gender)
# 출력: [1] "female" "male"

levels(gender) <- c("Female", "Male")
print(gender)
# 출력: [1] Male   Female Female Male  
# Levels: Female Male

education <- factor(c("highschool", "college", "graduate"),
                    levels = c("highschool", "college", "graduate"),
                    ordered = TRUE)
print(education)
# 출력: [1] highschool college    graduate   
# Levels: highschool < college < graduate

is.ordered(education)
# 출력: TRUE

팩터의 변환

팩터는 필요에 따라 다른 데이터 타입으로 변환할 수 있습니다.

  • 문자형 변환: 팩터를 문자형 데이터로 변환하려면 as.character() 함수를 사용합니다.
  • 숫자형 변환: 팩터를 숫자형 데이터로 변환하려면 as.numeric() 함수를 사용합니다. 이때, 숫자는 각 레벨의 인덱스로 변환됩니다.
# 문자형 변환
as.character(gender)
# 출력: [1] "Male"   "Female" "Female" "Male"

# 숫자형 변환
as.numeric(gender)
# 출력: [1] 2 1 1 2

팩터의 정렬

순서가 있는 팩터(서열형 데이터)는 순서를 고려하여 정렬할 수 있습니다.

sorted_education <- sort(education)
print(sorted_education)
# 출력: [1] highschool college    college    graduate  
# Levels: highschool < college < graduate

팩터의 활용

팩터는 통계 분석과 데이터 시각화에서 범주형 데이터를 효율적으로 처리하기 위해 널리 사용됩니다. 예를 들어, 팩터를 사용해 범주형 데이터를 그룹화하거나, 통계 모델에 범주형 변수를 포함시킬 수 있습니다.

  • 범주별 빈도 계산 : table() 함수를 사용하여 팩터의 각 레벨에 해당하는 빈도를 계산할 수 있습니다.
table(gender)
# 출력:
# female   male 
#      2      2

팩터의 유용성

팩터는 통계 분석, 데이터 시각화 및 머신러닝 모델링에서 범주형 데이터를 효율적으로 처리하는 데 필수적입니다. 팩터를 사용하면 범주형 데이터의 처리 속도가 빨라지고, 모델링 과정에서 데이터의 의미를 더 명확하게 표현할 수 있습니다. 또한, 데이터 시각화에서 팩터를 사용하면 범주형 데이터를 쉽게 그룹화하고 시각화할 수 있습니다.


R의 데이터 종류(구조)

R에서는 다양한 데이터 구조가 있으며, 각 구조는 특정 형태로 데이터를 저장하는 방법을 제공합니다.


벡터 (Vector)

R에서 가장 기본적이고 중요한 데이터 구조 중 하나로, 동일한 데이터 타입의 값들을 일렬로 저장하는 1차원 배열입니다.

벡터는 숫자형, 논리형, 문자형, 복소수형 등 다양한 데이터 타입을 가질 수 있으며, 벡터 내의 모든 요소는 동일한 데이터 타입을 가져야 합니다.

만약 서로 다른 데이터 타입의 값들이 포함될 경우, R은 자동으로 데이터 타입을 일관성 있게 변환하여 저장합니다.(데이터 타입의 우선순위를 기준으로 변환)

  • 데이터 타입의 우선순위 : 문자형 → 숫자형 → 논리형
# 벡터는 c() 함수를 사용하여 생성
# 숫자형 벡터
numeric_vector <- c(1, 2, 3, 4, 5)

# 문자형 벡터
character_vector <- c("apple", "banana", "cherry")

# 논리형 벡터
logical_vector <- c(TRUE, FALSE, TRUE)

# 복소수형 벡터
complex_vector <- c(1+2i, 3+4i)

벡터의 인덱싱과 슬라이싱

R에서 벡터의 인덱스는 1부터 시작합니다. 특정 위치의 요소에 접근하거나, 벡터의 일부분(슬라이스)을 추출할 수 있습니다.

# 벡터의 첫 번째 요소에 접근
numeric_vector[1]
# 출력: 1

# 벡터의 두 번째부터 네 번째 요소까지 추출
numeric_vector[2:4]
# 출력: 2 3 4

# 특정 요소를 제외한 벡터
numeric_vector[-1]
# 출력: 2 3 4 5

벡터의 연산

R에서는 벡터 간의 연산을 매우 쉽게 할 수 있습니다. 벡터 간의 덧셈, 뺄셈, 곱셈, 나눗셈 등은 동일한 위치의 요소들 간에 수행됩니다.

v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)

# 벡터 간 덧셈
v_sum <- v1 + v2
print(v_sum)
# 출력: 5 7 9

# 벡터 간 곱셈
v_prod <- v1 * v2
print(v_prod)
# 출력: 4 10 18

특별한 벡터 생성 방법

R에서는 특정 패턴을 가지는 벡터를 쉽게 생성할 수 있는 함수들을 제공합니다.

  • 연속된 숫자 벡터: 연산자 또는 seq() 함수를 사용합니다.
1:5
# 출력: 1 2 3 4 5

seq(1, 10, by = 2)
# 출력: 1 3 5 7 9
  • 반복된 벡터: rep() 함수를 사용합니다.
rep(1, times = 5)
# 출력: 1 1 1 1 1

rep(c(1, 2), each = 3)
# 출력: 1 1 1 2 2 2

벡터의 결합과 분할

  • 벡터 결합: c() 함수를 사용해 여러 벡터를 결합할 수 있습니다.
  • 벡터 분할: split() 함수를 사용해 조건에 따라 벡터를 분할할 수 있습니다.
v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)
combined <- c(v1, v2)
print(combined)
# 출력: 1 2 3 4 5 6

v <- c(1, 2, 3, 4, 5, 6)
split(v, v %% 2)
# 출력: $`0` [1] 2 4 6
#      $`1` [1] 1 3 5

R 프로그래밍의 변수와 데이터 타입은 데이터 분석의 기초를 다지는 중요한 개념입니다. 변수에 데이터를 할당하고 다양한 데이터 타입을 이해함으로써, 데이터를 효과적으로 처리하고 분석할 수 있는 능력을 키울 수 있습니다. 이번 글에서는 변수와 팩터 및 벡터에 대해 살펴보았으며, 다음 글에서는 리스트, 행렬, 데이터프레임과 같은 R의 다른 데이터 구조들에 대해 자세히 알아보겠습니다. R의 다양한 데이터 구조를 이해함으로써 더욱 복잡한 데이터 처리 작업도 쉽게 해낼 수 있습니다.

감사합니다

728x90