통계/R

R에서 벡터 활용

MKKM 2023. 9. 27. 20:07
반응형

벡터는 여러 값을 연속적으로 저장하는 데이터 구조로, R에서의 연산과 데이터 처리의 기반이 됩니다.

이번에는 R에서의 벡터의 기본 개념부터 데이터 타입, 형변환, NA 값 처리, 조건문과 반복문의 활용, 그리고 벡터를 사용할 때 알아야 할 주의사항과 팁에 대해 자세히 살펴보겠습니다. 

 

 

목차

  1. R에서 벡터란 무엇인가?
  2. 벡터의 생성
  3. 벡터의 연산
  4. 벡터의 인덱싱과 슬라이싱
  5. 벡터의 속성과 유용한 함수들
  6. 벡터의 이름 지정 및 활용
  7. 벡터의 데이터 타입과 형변환
  8. 벡터에서 NA 값 다루기
  9. 벡터에서의 조건문과 반복문 활용
  10. 벡터와 관련된 주의사항 및 팁

 

1. R에서 벡터란 무엇인가?

1-1. 벡터의 정의

R에서 벡터는 동일한 데이터 타입을 가진 원소들의 1차원 배열입니다. 예를 들어, 숫자만 포함된 벡터나 문자열만 포함된 벡터 등을 생성할 수 있습니다. 벡터는 R의 가장 기본적인 데이터 구조 중 하나로, 복잡한 데이터 구조를 구성하는 블록 역할을 합니다.

 

1-2. R에서의 벡터의 중요성

벡터는 R 프로그래밍의 핵심입니다. 대부분의 데이터 분석 작업이 벡터 연산을 기반으로 수행되며, R의 다양한 함수들은 벡터 입력을 받아 벡터 또는 다른 데이터 타입의 출력을 제공합니다.

 

2. 벡터의 생성

2-1. c() 함수를 사용한 벡터 생성

R에서 가장 기본적인 방법으로 벡터를 생성하는 방법은 `c()` 함수를 사용하는 것입니다. 이 함수는 여러 원소를 결합하여 벡터를 생성합니다.

example_vector <- c(1, 2, 3, 4, 5)

위의 코드는 1부터 5까지의 숫자를 원소로 가진 벡터를 생성합니다.

 

2-2. 연속된 숫자의 벡터 생성: seq()와 : 연산자

연속된 숫자의 벡터를 생성하기 위해서는 `seq()` 함수나 `:` 연산자를 사용할 수 있습니다.

seq_vector <- seq(1, 10, by=2)
colon_vector <- 1:5

첫 번째 코드는 1부터 10까지 2씩 증가하는 벡터를 생성하며, 두 번째 코드는 1부터 5까지의 연속된 숫자 벡터를 생성합니다.

 

2-3. 반복된 숫자의 벡터 생성: rep() 함수

특정 값이나 숫자를 반복하여 벡터를 생성하고 싶을 때 `rep()` 함수를 사용합니다.

repeated_vector <- rep(1, times=5)

위의 코드는 숫자 1을 5번 반복한 벡터를 생성합니다.

 

3. 벡터의 연산

3-1. 벡터 간의 산술 연산

벡터 간의 산술 연산은 원소별로 수행됩니다. 예를 들어, 두 벡터를 더하면, 각 벡터의 동일한 위치에 있는 원소들이 더해져 새로운 벡터가 생성됩니다.

result_vector <- example_vector + colon_vector

위의 코드는 `example_vector`와 `colon_vector`의 각 원소를 더한 결과를 `result_vector`에 저장합니다.

 

3-2. 벡터와 스칼라 간의 연산

벡터에 스칼라 값을 연산하면 해당 연산은 벡터의 모든 원소에 적용됩니다.

doubled_vector <- example_vector * 2

위 코드는 `example_vector`의 각 원소를 2배한 결과를 `doubled_vector`에 저장합니다.

 

3-3. 벡터의 논리 연산

벡터의 원소에 조건을 적용하여 논리 벡터를 얻을 수 있습니다. 이를 통해 원하는 조건을 만족하는 원소를 선택하거나, 조건에 따라 다른 연산을 적용하는 등의 작업을 할 수 있습니다.

is_even <- example_vector %% 2 == 0

위의 코드는 `example_vector`의 각 원소가 짝수인지를 검사하여 결과를 논리 벡터 `is_even`에 저장합니다.

 

4. 벡터의 인덱싱과 슬라이싱

4-1. 위치를 이용한 벡터 인덱싱

R에서 벡터 원소에 접근할 때 위치를 사용하여 인덱싱할 수 있습니다. 첫 번째 원소의 위치는 1입니다.

example_vector <- c(10, 20, 30, 40, 50)
third_element <- example_vector[3]

위 코드에서 `third_element`는 `example_vector`의 세 번째 원소인 30을 저장합니다.

 

4-2. 조건을 이용한 벡터 인덱싱

논리 벡터를 사용하여 조건을 만족하는 원소만 선택할 수 있습니다.

above_30 <- example_vector[example_vector > 30]

`above_30`는 30 초과의 값을 가진 원소들을 저장합니다.

 

4-3. 벡터 슬라이싱으로 부분집합 얻기

벡터의 연속된 일부 원소들을 선택하여 부분집합을 얻을 수 있습니다.

subset_vector <- example_vector[2:4]

`subset_vector`는 `example_vector`의 두 번째부터 네 번째 원소를 포함합니다.

 

5. 벡터의 속성과 유용한 함수들

5-1. 벡터의 길이: length() 함수

`length()` 함수는 벡터의 원소 개수를 반환합니다.

len <- length(example_vector)

`len`은 `example_vector`의 길이인 5를 저장합니다.

 

5-2. 벡터의 유일한 값: unique() 함수

`unique()` 함수는 벡터에서 중복된 값을 제거한 결과를 반환합니다.

unique_values <- unique(c(1, 2, 2, 3, 3, 3))

`unique_values`는 중복을 제거한 1, 2, 3을 포함합니다.

 

5-3. 벡터 정렬: sort() 함수

`sort()` 함수를 사용하면 벡터를 오름차순 또는 내림차순으로 정렬할 수 있습니다.

sorted_vector <- sort(example_vector, decreasing=TRUE)

`sorted_vector`는 내림차순으로 정렬된 `example_vector`를 포함합니다.

 

6. 벡터의 이름 지정 및 활용

6-1. 이름을 가진 벡터 생성

벡터의 원소마다 고유한 이름을 지정하여 가독성을 높일 수 있습니다.

named_vector <- c(Alice=25, Bob=30, Charlie=35)

각 원소에 이름을 할당하여 벡터를 생성했습니다.

 

6-2. 이름을 통한 벡터 인덱싱

원소의 이름을 사용하여 벡터에서 특정 원소에 접근할 수 있습니다.

age_of_bob <- named_vector["Bob"]

 

`age_of_bob`는 `named_vector`에서 "Bob"의 나이인 30을 저장합니다.

 

7. 벡터의 데이터 타입과 형변환

7-1. 벡터의 데이터 타입 확인: class() 함수

R에서 벡터의 데이터 타입을 확인하기 위해서는 `class()` 함수를 사용합니다.

data_type <- class(example_vector)

이 코드는 `example_vector`의 데이터 타입을 `data_type`에 저장합니다.

 

7-2. 데이터 타입 간의 형변환

벡터의 원소 타입을 다른 타입으로 변환하려면 `as.numeric()`, `as.character()` 등의 함수를 사용합니다.

char_vector <- as.character(example_vector)

이 코드는 `example_vector`의 원소들을 문자열 형태로 변환한 결과를 `char_vector`에 저장합니다.

 

8. 벡터에서 NA 값 다루기

8-1. NA 값 확인: is.na() 함수

`is.na()` 함수는 벡터 내에서 NA 값을 확인하는데 사용됩니다. 이 함수는 논리 벡터를 반환하며, NA 값에 해당하는 위치에 TRUE가 표시됩니다.

na_positions <- is.na(example_vector)

위 코드는 `example_vector` 내의 NA 위치를 `na_positions` 논리 벡터에 저장합니다.

 

8-2. NA 값을 제외한 연산: na.omit() 함수

`na.omit()` 함수를 사용하여 NA 값을 제외하고 연산을 수행할 수 있습니다.

clean_vector <- na.omit(example_vector)

이 코드는 `example_vector`에서 NA 값을 제외한 결과를 `clean_vector`에 저장합니다.

 

9. 벡터에서의 조건문과 반복문 활용

9-1. ifelse()를 사용한 조건적 값 할당

`ifelse()` 함수를 사용하면 벡터의 원소마다 조건을 검사하여 값을 할당할 수 있습니다.

double_evens <- ifelse(example_vector %% 2 == 0, example_vector * 2, example_vector)

위 코드는 `example_vector`의 짝수 원소들만 2배하여 `double_evens`에 저장합니다.

 

9-2. 벡터 내에서의 for 루프 활용

R에서 `for` 루프를 사용하여 벡터의 각 원소를 순차적으로 처리할 수 있습니다.

for (value in example_vector) { print(value) }

위 코드는 `example_vector`의 각 원소를 출력합니다.

 

10. 벡터와 관련된 주의사항 및 팁

10-1. 벡터 연산 시 길이에 관한 주의점

벡터 간 연산을 수행할 때 벡터의 길이가 다르면 R은 원소를 재사용합니다. 이로 인해 예상치 못한 결과가 발생할 수 있으므로 주의가 필요합니다.

 

10-2. 벡터 활용 시 효율적인 코딩 팁

벡터화된 연산을 활용하면 코드의 실행 속도를 크게 향상시킬 수 있습니다. `apply` 계열 함수나 `dplyr` 패키지의 `mutate` 함수를 활용하여 효율적인 코드를 작성하는 것이 좋습니다.

 

 
반응형