Menu
CoddyTech

Indeksowanie logiczne

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

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

Gdy zastosujesz porównanie do wektora, R zwraca 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 prostsze niż pisanie pętli do filtrowania danych. 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. Pozwala filtrować zbiory 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, reprezentujące zakres (np. 20,60)

Używając indeksowania logicznego:

  1. Utwórz wektor liczbowy z liczb oddzielonych przecinkami
  2. Wyodrębnij i wypisz wszystkie elementy, które są mniejsze niż pierwszy próg (dolna granica)
  3. Wyodrębnij i wypisz wszystkie elementy, które są większe niż drugi próg (górna granica)
  4. Wyodrębnij i wypisz wszystkie elementy, które znajdują się w zakresie (są większe lub równe pierwszemu progowi ORAZ mniejsze 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 między 20 a 50 (włącznie): 25, 45, 35, 50

Użyj operatora &, aby połączyć warunki dla 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 rozdzielone przecinkami w wektor numeryczny
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# Przekształć wartości progowe
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 &amp;, aby wybrać elementy mieszczące się w przedziale (włącznie z 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