Vektör Dilimleme ve İndeksleme
Coddy'nin R Journey'sinin Temeller bölümünün bir parçası — ders 67 / 78.
Tekil öğelere nasıl erişeceğinizi ve vektörler üzerinde nasıl döngü kuracağınızı öğrendiniz. Şimdi dilimleme (slicing) kullanarak aynı anda birden fazla öğeyi nasıl çıkaracağımızı keşfedelim. Bu teknik, tek bir işlemde bir vektörün alt kümesini almanızı sağlar.
Birden fazla öğeyi çıkarmak için, köşeli parantezlerin içine indekslerden oluşan bir vektör geçirin:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Çıktı:
[1] 10 30 50Ardışık bir dizi öğeyi seçmek için iki nokta üst üste operatörünü de kullanabilirsiniz:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Çıktı:
[1] 20 30 40R'da negatif indeksler güçlüdür. Elemanları seçmek yerine hariç tutarlar:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Çıktı:
[1] 10 30 40 50Negatif indekslerden oluşan bir vektör geçirerek birden fazla öğeyi hariç tutabilirsiniz:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Çıktı:
[1] 20 30 40Unutmayın: Aynı seçimde pozitif ve negatif indeksleri karıştıramazsınız. Eğer numbers[c(1, -2)] kodunu denerseniz R bir hata verecektir.
Görev
Kolayİki satırlık bir girdi alacaksınız:
- Virgülle ayrılmış bir sayı listesi (örneğin,
100,200,300,400,500,600,700) - Hariç tutulacak bir aralığı temsil eden, virgülle ayrılmış iki dizin (örneğin,
2,5)
Aşağıdaki işlemleri gerçekleştirin:
- Virgülle ayrılmış sayılardan sayısal bir vektör oluşturun
- Bir dizin vektörü kullanarak 1, 3 ve 5. konumlardaki öğeleri yazdırın
- İki nokta üst üste operatörünü kullanarak 2. konumdan 4. konuma kadar olan öğeleri yazdırın
- Verilen ilk dizindeki öğe hariç tutulmuş vektörü yazdırın (negatif dizinleme kullanarak)
- İlk dizinden ikinci dizine kadar olan öğeler hariç tutulmuş vektörü yazdırın (aralıkla negatif dizinleme kullanarak)
Örneğin, girdiler şunlarsa:
10,20,30,40,50,60,70
3,5Çıktı şöyle olmalıdır:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Açıklama:
- 1, 3, 5. konumlardaki öğeler: 10, 30, 50
- 2. konumdan 4. konuma kadar olan öğeler: 20, 30, 40
- 3. konumun hariç tutulması şunları verir: 10, 20, 40, 50, 60, 70
- 3'ten 5'e kadar olan konumların hariç tutulması şunları verir: 10, 20, 60, 70
Kopya kağıdı
Bir vektörden birden fazla öğe çıkarmak için, köşeli parantez içine bir indeks vektörü geçirin:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50Ardışık öğelerden oluşan bir aralığı seçmek için iki nokta üst üste operatörünü kullanın:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40Negatif indeksler, öğeleri seçmek yerine hariç tutar:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2]) # [1] 10 30 40 50Negatif indekslerden oluşan bir vektör geçirerek birden fazla öğeyi hariç tutun:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)]) # [1] 20 30 40Önemli: Aynı seçim içinde pozitif ve negatif indeksleri karıştıramazsınız.
Kendin dene
# Girdiyi oku
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_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(strsplit(numbers_input, ",")[[1]])
# İki indeksi ayrıştır
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Kodunuzu aşağıya yazın
# 1. Bir indeks vektörü kullanarak 1, 3 ve 5. konumlardaki öğeleri yazdırın
# 2. İki nokta üst üste operatörünü kullanarak 2. konumdan 4. konuma kadar olan öğeleri yazdırın
# 3. idx1 konumundaki öğe hariç tutulmuş vektörü yazdırın (negatif indeksleme)
# 4. idx1'den idx2'ye kadar olan öğelerin hariç tutulduğu vektörü yazdırın (aralıkla negatif indeksleme)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
4Operatörler Bölüm 2
Mantıksal Operatörler (AND, OR)Mantıksal Operatörler Bölüm 2 (NOT)Özet - Basit MantıkVektörize Mantık Bölüm 1Vektörize Mantık Bölüm 27Hesap Paylaşım Hesaplayıcısı
Hoş Geldiniz MesajıKullanıcıdan Girdi Alma10Farklı Bir FizzBuzz
Oyuna Genel BakışFizzBuzz Fonksiyonu13İleri Seviye Vektörler
Vektör Dilimleme ve İndekslemeMantıksal İndekslemeVektör Aritmetiği ve Geri Dönüşüm%in% Operatörü2Değişkenler ve Veri Tipleri
Sayısal Veri TipiTam Sayı Veri TipiKarakter Veri TipiMantıksal Veri TipiVeri Tiplerini Kontrol Etmeİsimlendirme KurallarıEksik Değerler: NAÖzet - Değişken Oluşturma8Döngüler
For DöngüsüWhile DöngüsüBreakNext (Continue)Özet - FaktöriyelDizi Oluşturma (seq, :)İç İçe DöngülerÖzet - Dinamik Girdi3Operatörler 1. Bölüm
Aritmetik OperatörlerTam Sayı Bölmesi ve Mod AlmaAtama OperatörleriÖzet - Basit MatematikKarşılaştırma Operatörleri6Temel Giriş-Çıkış
Print ÇıktısıÇıktı için Cat KullanımıDeğişkenlerle Çıktı Almakreadline() ile Girdi OkumaTip Dönüşümü TemelleriÖzet - Yaş HesaplayıcıÖzet - Doğru mu Yanlış mı9Fonksiyonlar
Fonksiyon TanımlamaFonksiyon ArgümanlarıDönüş DeğerleriÖzet - Sigma FonksiyonuÖzet - Doğrulama FonksiyonuVarsayılan Parametre Değerleri