Anahtara Göre Sıralama
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 38 / 64.
order(x), x'i sıralayacak konumları döndürür: önce en küçük değerin konumu, ardından bir sonraki ve bu şekilde devam eder. Bu vektörü başka bir vektörle indeksleyerek o vektörü x'e göre sıralayın:
names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])Çıktı:
[1] 3 2 1
[1] "bo" "ada" "cy" Azalan sıralama için decreasing = TRUE ifadesini geçirin veya sayısal bir anahtarın önüne eksi işareti koyun:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])Çıktı:
[1] "ada" "cy" "bo"
[1] "ada" "cy" "bo" Eşitlikleri bozmak için order() işlevine ikinci bir anahtar verin. Burada puanlar yüksekten düşüğe sıralanır ve eşit puanlar ada göre sıralanır:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])Çıktı:
[1] "ada" "bo" "cy" order(), ikinci bir anahtar verilmediğinde eşit değerleri özgün sıralarında tutar. Aynı konumlar, birbiriyle ilişkili birkaç vektörü yeniden sıralayabilir:
items <- c("tea", "jam", "oil")
price <- c(4, 2.5, 4)
qty <- c(1, 6, 3)
idx <- order(price)
print(items[idx])
print(qty[idx])Çıktı:
[1] "jam" "tea" "oil"
[1] 6 1 3Görev
Kolayranking(names, scores) işlevini tamamlayın. En yüksek puandan en düşük puana doğru, oyuncu başına 1. ada 95 olmak üzere bir satır döndürün. Aynı puana sahip oyuncular alfabetik olarak listelenir.
Sağlanan kod, oyuncuları virgüllerle ayrılmış name:score çiftleri olarak okur ve döndürülen her satırı yazdırır.
Kendin dene
ranking <- function(names, scores) {
# Kodunuzu buraya yazın
character(0)
}
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
pairs <- strsplit(strsplit(input[1], ",")[[1]], ":")
names <- sapply(pairs, function(p) p[1])
values <- as.numeric(sapply(pairs, function(p) p[2]))
cat(ranking(names, values), sep = "\n")
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Dizeleri Derinlemesine
substr() ile Alt Dizelersprintf() ile BiçimlendirmeBölme ve BirleştirmeDizelerde AramaMetin DeğiştirmeTekrar - Kullanıcı Adı Oluşturucu4Matrisler
Matris OluşturmaMatrisleri İndekslemeSatır ve Sütun ÖzetleriMatris AritmetiğiTekrar - Oturma Planı2Anahtar-Değer Aramaları
Adlandırılmış Vektör AramalarıAnahtarları DenetlemeAnahtar Ekleme ve KaldırmaAdlar Üzerinde DöngüTekrar - Hisse Senedi Masası5Proje - Not Defteri
Öğrenci EklemeNotları Kaydetme8Sıralama ve Gruplama
Vektörleri SıralamaAnahtara Göre Sıralamasplit() ile GruplamaGrup ÖzetleriTekrar - Liderlik Tablosu3Kümeler ve Sayma
Benzersiz DeğerlerKüme İşlemleriÜyelik Testleritable() ile SaymaTekrar - Etkinlik Konukları6Değer Olarak Fonksiyonlar
Anonim FonksiyonlarFonksiyonları GeçirmeFonksiyon DöndürmeDurum Bilgili Closure'larTekrar - İndirim Kuralları9Veri Çerçeveleri
Veri Çerçeveleri OluşturmaSütunlar ve SatırlarSatırları FiltrelemeEkleme ve SıralamaTekrar - Satış Raporu12Proje - Harcama Takipçisi
Harcamaları KaydetmeToplam HarcamaKendi başına pratik yap: Online R derleyicisi