이제 어느정도 벡터와 친해졌습니다. 이번 포스팅에서는 벡터를 우리 마음대로 자르고, 골라내고, 선택하는 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을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!

Similar Posts