논리형 인덱싱
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 50R은 논리 벡터가 TRUE인 요소만 유지합니다. 이 방식은 데이터를 필터링하기 위해 루프를 작성하는 것보다 훨씬 깔끔합니다. 논리 연산자를 사용하여 조건들을 결합할 수 있습니다:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])출력:
[1] 20 30 40논리적 인덱싱은 단순하고 가독성 있는 표현식으로 데이터 세트를 필터링할 수 있게 해주는, 데이터 조작을 위한 R의 가장 강력한 기능 중 하나입니다.
챌린지
쉬움두 줄의 입력을 받게 됩니다:
- 쉼표로 구분된 숫자 목록 (예:
15,42,8,67,23,91,34,12,56) - 범위를 나타내는 쉼표로 구분된 두 개의 임계값 (예:
20,60)
논리적 인덱싱(logical indexing)을 사용하여 다음을 수행하세요:
- 쉼표로 구분된 숫자들로부터 숫자형 벡터를 생성합니다.
- 첫 번째 임계값(하한선)보다 작은 모든 요소를 추출하여 출력합니다.
- 두 번째 임계값(상한선)보다 큰 모든 요소를 추출하여 출력합니다.
- 범위 내에 있는 (첫 번째 임계값보다 크거나 같고 그리고 두 번째 임계값보다 작거나 같은) 모든 요소를 추출하여 출력합니다.
예를 들어, 입력값이 다음과 같다면:
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. & 연산자와 논리적 인덱싱을 사용하여 범위 내(경계값 포함)의 요소를 추출하고 출력하세요이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.