Menu
Coddy logo textTech

Indeksowanie logiczne

Część sekcji Podstawy ścieżki R w Coddy. Lekcja 68 z 78.

Zamiast określać dokładne pozycje, możesz użyć wektora logicznego, aby wybrać elementy. Ta technika, nazywana indeksowaniem logicznym, pozwala filtrować wektor na podstawie warunków, a nie pozycji.

Gdy zastosujesz porównanie do wektora, R zwróci wektor logiczny o tej samej długości:

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

Wynik:

[1] FALSE FALSE  TRUE  TRUE  TRUE

Możesz użyć tego wektora logicznego bezpośrednio w nawiasach kwadratowych, aby wyodrębnić pasujące elementy:

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

Wynik:

[1] 30 40 50

R zachowuje tylko te elementy, dla których wektor logiczny ma wartość TRUE. To podejście jest znacznie czytelniejsze niż filtrowanie danych za pomocą pętli. Możesz łączyć warunki za pomocą operatorów logicznych:

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

Wynik:

[1] 20 30 40

Indeksowanie logiczne to jedna z najpotężniejszych funkcji R służących do manipulowania danymi. Umożliwia filtrowanie zbiorów danych za pomocą prostych, czytelnych wyrażeń.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wiersze danych wejściowych:

  1. Listę liczb oddzielonych przecinkami (np. 15,42,8,67,23,91,34,12,56)
  2. Dwie wartości progowe oddzielone przecinkiem, określające zakres (np. 20,60)

Używając indeksowania logicznego:

  1. Utwórz wektor numeryczny z liczb oddzielonych przecinkami
  2. Wyodrębnij i wypisz wszystkie elementy mniejsze niż pierwszy próg (dolna granica)
  3. Wyodrębnij i wypisz wszystkie elementy większe niż drugi próg (górna granica)
  4. Wyodrębnij i wypisz wszystkie elementy mieszczące się w zakresie (większe niż lub równe pierwszemu progowi ORAZ mniejsze niż lub równe drugiemu progowi)

Na przykład, jeśli dane wejściowe to:

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

Wynik powinien być następujący:

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

Wyjaśnienie:

  • Elementy mniejsze niż 20: 5, 10, 15
  • Elementy większe niż 50: 60, 80
  • Elementy w przedziale od 20 do 50 (włącznie): 25, 45, 35, 50

Użyj operatora &, aby połączyć warunki filtra zakresu.

Spróbuj swoich sił

# Wczytaj dane wejściowe
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Przekształć liczby oddzielone przecinkami w wektor liczb
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# Przekształć wartości progowe w liczby
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: Napisz swój kod poniżej
# 1. Użyj indeksowania logicznego, aby wybrać elementy mniejsze niż lower_bound i je wypisać
# 2. Użyj indeksowania logicznego, aby wybrać elementy większe niż upper_bound i je wypisać
# 3. Użyj indeksowania logicznego z operatorem &, aby wybrać elementy z podanego przedziału (włącznie z jego granicami) i je wypisać
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator R online