이제 어느정도 벡터와 친해졌습니다. 이번 포스팅에서는 벡터를 우리 마음대로 자르고, 골라내고, 선택하는 R 벡터 슬라이싱, R 벡터 필터링, R 벡터 인덱싱의 개념을 다루도록 하겠습니다.
R 벡터 슬라이싱
R에서의 벡터 슬라이싱은 벡터의 특정 부분을 선택하여 추출하는 과정을 의미합니다. 이를 통해 원하는 데이터 세트의 일부분만을 쉽게 가져올 수 있습니다. 벡터 슬라이싱은 여러가지 방법으로 수행할 수 있으며, 인덱싱을 통해 구현됩니다.
R 벡터 인덱싱
R에서 인덱싱은 순서를 사용해서 데이터 객체의 특정 부분에 접근하기 위한 방법입니다. 벡터의 일부를 추출할 때, 대괄호([]
) 연산자를 사용하고, 내가 접근하고자 하는 대상의 값의 위치에 해당하는 숫자를 대괄호 안에 넣어주는 행위를 인덱싱이라고 합니다. 벡터 인덱싱을 사용하여 벡터를 내가 원하는대로 자를 (슬라이싱) 수 있죠.
# 벡터 슬라이싱 예제
a <- 1:10 * 2
a
>> [1] 2 4 6 8 10 12 14 16 18 20
# 두 번째 값 추출
a[2]
>> [1] 4
인덱싱 안에 벡터가 들어가도 됩니다. 추출하고자 하는 것들의 위치를 벡터로 입력하면 됩니다. 아래 코드를 살펴보겠습니다.
- 구문 형식:
vector1[vector2]
a[3:5]
>> [1] 6 8 10
위의 코드는 콜론(:
) 연산자를 사용해서 a
의 세번째부터 다섯 번째까지의 원소들을 선택하는 코드입니다. 앞에서 배웠던 c()
함수로 만든 벡터가 들어가도 상관없죠.
# 첫 번째, 세 번째, 다섯 번째 값 추출
a[c(1, 3, 5)]
>> [1] 2 6 10
인덱싱을 할 때 중복해서 선택이 가능합니다.
- 인덱싱 중복 가능
a[c(2, 2, 4, 3)]
>> [1] 4 4 8 6
R 음수 인덱싱 (특정 값 제거)
가끔 아래의 코드처럼 R 벡터 인덱싱에 음수를 사용한 벡터 인덱싱이 사용됩니다. 음수의 의미는 대상이 되는 벡터에서 그 위치에 있는 원소를 제외한 나머지를 선택한다는 의미입니다.
a[-2]
>> [1] 2 6 8 10 12 14 16 18 20
R 논리 인덱싱
대괄호 연산자와 비교 연산자를 사용하여 TRUE, FALSE 벡터를 만든 다음, 이것을 사용하여 원하는 벡터의 부분을 골라내는 논리 벡터 슬라이싱을 생각해보도록 하겠습니다.
- 구문:
vector[condition]
b <- a[a > 3]
b
>> [1] 4 6 8 10 12 14 16 18 20
위 예제에서는 벡터 a
의 값이 3
보다 큰 요소만 추출하여 b
에 할당합니다. 이러한 조건식을 사용하여 원하는 값만 추출할 수 있습니다. ifelse()
와 같은 조건 함수를 사용하지 않아도 간단하게 코드를 작성할 수 있습니다.
R 논리 연산자와 조건문
대괄호 안에 연산자를 조합하여 원하는 값을 추출할 수도 있습니다. 예를 들어, 다음과 같이 벡터 a
에서 2
보다 크고 9
보다 작은 값을 추출할 수 있습니다.
b <- a[a > 2 & a < 9]
b
>> [1] 4 6 8
알아두면 쓸데있는 논리 연산자들
데이터 분석과 프로그래밍을 하다 보면, 벡터나 데이터 프레임에서 특정 조건을 만족하는 요소만을 선택하거나 필터링하는 경우가 빈번하게 발생합니다. R에서는 이러한 작업을 효율적으로 수행할 수 있도록, 다양한 논리 연산자를 제공하고 있습니다.
==
, !=
연산자
==
연산자: 두 값을 비교하여 같으면 TRUE, 다르면 FALSE를 반환합니다.!=
연산자: 두 값이 다를 경우 TRUE, 같을 경우 FALSE를 반환합니다.
a[a == 4]
>> [1] 4
a[a != 4]
>> [1] 2 6 8 10 12 14 16 18 20
%%
(나머지), %/%
(몫) 연산자
%%
연산자: 나머지를 계산합니다.%/%
연산자: 몫을 계산합니다.
나머지 연산자(%
)를 사용하여 벡터 슬라이싱을 수행할 수도 있습니다. 나머지 연산자를 사용하여 특정 패턴의 값만 추출할 수 있습니다. 예를 들어, 다음과 같이 벡터 a
에서 홀수 번째 요소만 추출할 수 있습니다.
b <- a[1:10 %% 2 == 1]
b
>> [1] 2 6 10 14 18
위 예제에서는 1:10
를 사용하여 인덱스 벡터를 생성합니다. 이후, %%
연산자를 사용하여 1:10
벡터를 2로 나눈 나머지가 1인 요소만 추출합니다. 이를 통해 벡터 a에서 홀수 번째 요소만 추출할 수 있습니다. 이러한 방식을 사용하여 특정 패턴의 값만 추출할 수 있습니다.
다른 예로, 3으로 나눈 나머지가 0인 요소만 추출하는 코드는 다음과 같습니다.
b <- a[a %% 3 == 0]
b
>> [1] 6 12 18
위 예제에서는 a
벡터에서 3
으로 나눈 나머지가 0
인 요소만 추출합니다. 이를 통해 벡터 a
에서 3
의 배수에 해당하는 요소만 추출할 수 있습니다.
&
(AND), |
(OR) 연산자
다음과 같이 주어진 x, y 벡터를 사용하여 And 연산자와 Or 연산자의 의미를 알아보겠습니다.
x <- c(TRUE, TRUE, FALSE)
y <- c(TRUE, FALSE, FALSE)
&
(AND): 두 논리 값이 모두 TRUE일 때 TRUE를 반환하며, 그 외 FALSE 반환합니다.|
(OR): 두 논리 값 중 하나라도 TRUE일 때 TRUE를 반환하고, 두 값이 모두 FALSE인 경우에만 FALSE를 반환합니다.
&
연산자를 통해 두 가지 이상의 조건을 동시에 만족하는 데이터를 필터링할 수 있습니다.
x & y
>> [1] TRUE FALSE FALSE
|
연산자를 통해 두 가지 이상의 조건 중 하나 이상을 만족하는 데이터를 선택할 수 있습니다.
x | y
>> [1] TRUE TRUE FALSE
조건문 혼합하기
위에서 배운 논리 연산자 내용을 떠올리면서 다음 코드의 결과값을 해석해보자.
a[a == 4 & a > 15]
>> numeric(0)
a[a == 4 & a > 15]
는 벡터 a
에서 값이 4
인 원소 중에서 15
보다 큰 원소들을 선택하는 코드입니다. &
는 논리 연산자 AND를 나타내며, 두 개의 조건이 모두 만족하는 원소를 선택합니다. 따라서 이 코드에서는 값이 4인
원소와 15보다 큰 원소 두 가지 조건을 모두 만족하는 원소는 없으므로, umeric(0)
을 반환합니다.
a[a == 4 | a > 15]
>> [1] 4 16 18 20
a[a == 4 | a > 15]
는 벡터 a에서 값이 4인 원소 또는 15보다 큰 원소를 선택하는 코드입니다. |
는 논리 연산자 OR를 나타내며, 두 개의 조건 중 하나 이상을 만족하는 원소를 선택합니다. 따라서 이 코드에서는 값이 4인
원소와 15보다 큰 원소 중 하나 이상의 조건을 만족하는 숫자 4개를 선택합니다.
R 벡터 필터링을 이용한 벡터 값 변경
앞에서 배운 필터링을 이용하면, 벡터에 대한 조건문을 사용하여 벡터의 일부 값을 변경할 수 있습니다.
a[a >= 10] <- 10
a
>> [1] 2 4 6 8 10 10 10 10 10 10
a[a >= 10]
는 a
벡터에서 10 이상인 원소들을 선택한 것을 의미합니다. 이 선택된 원소들에 대해서 10이 할당되면서, a
벡터에서 10 이상인 값들은 모두 10으로 변경됩니다. 이후에 a
를 출력하면, a
벡터에서 10 이하인
값들은 그대로 유지되고, 10 이상인 값들은 모두 10으로 변경되어 있음을 확인할 수 있습니다.
본 포스팅은 R 프로그래밍 기초 공략.zip 교재의 일부분 입니다. 본 교재는 R을 독학하시는 분들을 위하여 특별히 제작된 교재입니다. R을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!