Menu
Coddy logo textTech

논리형 인덱싱

Coddy R 여정의 기초 섹션에 포함된 레슨 — 78개 중 68번째.

정확한 위치를 지정하는 대신, 논리형 벡터(logical vector)를 사용하여 요소를 선택할 수 있습니다. 논리형 인덱싱(logical indexing)이라고 불리는 이 기법을 사용하면 위치가 아닌 조건에 따라 벡터를 필터링할 수 있습니다.

벡터에 비교 연산을 적용하면, R은 동일한 길이의 논리형 벡터를 반환합니다:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)

출력:

[1] FALSE FALSE  TRUE  TRUE  TRUE

이 논리형 벡터를 대괄호 안에 직접 사용하여 일치하는 요소를 추출할 수 있습니다:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])

출력:

[1] 30 40 50

R은 논리 벡터가 TRUE인 요소만 유지합니다. 이 방식은 데이터를 필터링하기 위해 루프를 작성하는 것보다 훨씬 깔끔합니다. 논리 연산자를 사용하여 조건들을 결합할 수 있습니다:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])

출력:

[1] 20 30 40

논리적 인덱싱은 단순하고 가독성 있는 표현식으로 데이터 세트를 필터링할 수 있게 해주는, 데이터 조작을 위한 R의 가장 강력한 기능 중 하나입니다.

challenge icon

챌린지

쉬움

두 줄의 입력을 받게 됩니다:

  1. 쉼표로 구분된 숫자 목록 (예: 15,42,8,67,23,91,34,12,56)
  2. 범위를 나타내는 쉼표로 구분된 두 개의 임계값 (예: 20,60)

논리적 인덱싱(logical indexing)을 사용하여 다음을 수행하세요:

  1. 쉼표로 구분된 숫자들로부터 숫자형 벡터를 생성합니다.
  2. 첫 번째 임계값(하한선)보다 작은 모든 요소를 추출하여 출력합니다.
  3. 두 번째 임계값(상한선)보다 모든 요소를 추출하여 출력합니다.
  4. 범위 내에 있는 (첫 번째 임계값보다 크거나 같고 그리고 두 번째 임계값보다 작거나 같은) 모든 요소를 추출하여 출력합니다.

예를 들어, 입력값이 다음과 같다면:

5,25,10,45,60,15,80,35,50
20,50

출력은 다음과 같아야 합니다:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

설명:

  • 20보다 작은 요소: 5, 10, 15
  • 50보다 큰 요소: 60, 80
  • 20에서 50 사이(포함)의 요소: 25, 45, 35, 50

범위 필터를 위한 조건을 결합할 때는 & 연산자를 사용하세요.

치트 시트

논리적 인덱싱을 사용하면 위치가 아닌 조건에 따라 벡터를 필터링할 수 있습니다. 벡터에 비교 연산을 적용하면 R은 논리 벡터를 반환합니다:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# Output: [1] FALSE FALSE  TRUE  TRUE  TRUE

대괄호 안에 논리 벡터를 사용하여 일치하는 요소를 추출합니다:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# Output: [1] 30 40 50

& (AND)와 같은 논리 연산자를 사용하여 조건을 결합합니다:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Output: [1] 20 30 40

직접 해보기

# 입력 읽기
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# 쉼표로 구분된 숫자들을 숫자형 벡터로 파싱
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# 임계값 파싱
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: 아래에 코드를 작성하세요
# 1. 논리적 인덱싱을 사용하여 lower_bound보다 작은 요소를 추출하고 출력하세요
# 2. 논리적 인덱싱을 사용하여 upper_bound보다 큰 요소를 추출하고 출력하세요
# 3. & 연산자와 논리적 인덱싱을 사용하여 범위 내(경계값 포함)의 요소를 추출하고 출력하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨