Menu
Coddy logo textTech

Mantıksal İndeksleme

Coddy'nin R Journey'sinin Temeller bölümünün bir parçası — ders 68 / 78.

Tam konumları belirtmek yerine, öğeleri seçmek için mantıksal bir vektör kullanabilirsiniz. Mantıksal indeksleme (logical indexing) adı verilen bu teknik, bir vektörü konumlardan ziyade koşullara göre filtrelemenize olanak tanır.

Bir vektöre karşılaştırma uyguladığınızda, R aynı uzunlukta mantıksal bir vektör döndürür:

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

Çıktı:

[1] FALSE FALSE  TRUE  TRUE  TRUE

Eşleşen öğeleri çıkarmak için bu mantıksal vektörü doğrudan köşeli parantez içinde kullanabilirsiniz:

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

Çıktı:

[1] 30 40 50

R, yalnızca mantıksal vektörün TRUE olduğu öğeleri tutar. Bu yaklaşım, verileri filtrelemek için döngüler yazmaktan çok daha temizdir. Mantıksal operatörleri kullanarak koşulları birleştirebilirsiniz:

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

Çıktı:

[1] 20 30 40

Mantıksal indeksleme, veri setlerini basit ve okunabilir ifadelerle filtrelemenize olanak tanıyan, R'ın veri manipülasyonu için en güçlü özelliklerinden biridir.

challenge icon

Görev

Kolay

İki satırlık bir girdi alacaksınız:

  1. Virgülle ayrılmış bir sayı listesi (örneğin, 15,42,8,67,23,91,34,12,56)
  2. Bir aralığı temsil eden, virgülle ayrılmış iki eşik değeri (örneğin, 20,60)

Mantıksal indeksleme (logical indexing) kullanarak:

  1. Virgülle ayrılmış sayılardan sayısal bir vektör oluşturun
  2. İlk eşik değerinden (alt sınır) küçük olan tüm öğeleri ayıklayın ve yazdırın
  3. İkinci eşik değerinden (üst sınır) büyük olan tüm öğeleri ayıklayın ve yazdırın
  4. Aralık içinde olan (ilk eşik değerine eşit veya ondan büyük VE ikinci eşik değerine eşit veya ondan küçük) tüm öğeleri ayıklayın ve yazdırın

Örneğin, girdiler şunlar ise:

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

Çıktı şu şekilde olmalıdır:

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

Açıklama:

  • 20'den küçük öğeler: 5, 10, 15
  • 50'den büyük öğeler: 60, 80
  • 20 ile 50 arasındaki (dahil) öğeler: 25, 45, 35, 50

Aralık filtresi için koşulları birleştirmek üzere & operatörünü kullanın.

Kopya kağıdı

Mantıksal indeksleme, bir vektörü konumlar yerine koşullara göre filtrelemenize olanak tanır. Bir vektöre karşılaştırma uyguladığınızda, R mantıksal bir vektör döndürür:

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

Eşleşen öğeleri çıkarmak için köşeli parantez içinde mantıksal vektörü kullanın:

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

& (VE) gibi mantıksal operatörleri kullanarak koşulları birleştirin:

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

Kendin dene

# Girişi oku
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Virgülle ayrılmış sayıları sayısal bir vektöre dönüştür
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# Eşik değerlerini ayrıştır
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: Kodunuzu aşağıya yazın
# 1. lower_bound'dan küçük öğeleri çıkarmak için mantıksal indeksleme kullanın ve yazdırın
# 2. upper_bound'dan büyük öğeleri çıkarmak için mantıksal indeksleme kullanın ve yazdırın
# 3. Aralık içindeki (dahil) öğeleri çıkarmak için & operatörü ile mantıksal indeksleme kullanın ve yazdırın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler