R에서 벡터 활용
벡터는 여러 값을 연속적으로 저장하는 데이터 구조로, R에서의 연산과 데이터 처리의 기반이 됩니다.
이번에는 R에서의 벡터의 기본 개념부터 데이터 타입, 형변환, NA 값 처리, 조건문과 반복문의 활용, 그리고 벡터를 사용할 때 알아야 할 주의사항과 팁에 대해 자세히 살펴보겠습니다.
목차
- R에서 벡터란 무엇인가?
- 벡터의 생성
- 벡터의 연산
- 벡터의 인덱싱과 슬라이싱
- 벡터의 속성과 유용한 함수들
- 벡터의 이름 지정 및 활용
- 벡터의 데이터 타입과 형변환
- 벡터에서 NA 값 다루기
- 벡터에서의 조건문과 반복문 활용
- 벡터와 관련된 주의사항 및 팁
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` 함수를 활용하여 효율적인 코드를 작성하는 것이 좋습니다.
아래 포스팅도 참고해 보세요! ▶ RStudio 단축키 모음 ▶ [R] ggplot2로 쉽게 데이터 시각화하기 ▶ R에서 데이터 정렬하는 방법 ▶ R에서 그룹별 합계와 평균 구하기 |