Mengurutkan berdasarkan Kunci
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 38 dari 64.
order(x) mengembalikan posisi yang akan mengurutkan x: pertama posisi nilai terkecil, lalu posisi berikutnya, dan seterusnya. Gunakan posisinya untuk mengindeks vector lain agar vector tersebut diurutkan berdasarkan x:
names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])Output:
[1] 3 2 1
[1] "bo" "ada" "cy" Untuk urutan menurun, berikan decreasing = TRUE, atau letakkan tanda minus di depan kunci numerik:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])Output:
[1] "ada" "cy" "bo"
[1] "ada" "cy" "bo" Berikan kunci kedua kepada order() untuk mengurutkan nilai yang sama. Di sini, skor diurutkan dari tinggi ke rendah dan skor yang sama diurutkan berdasarkan nama:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])Output:
[1] "ada" "bo" "cy" order() mempertahankan urutan asli nilai yang sama jika tidak ada kunci kedua. Posisi yang sama dapat mengurutkan ulang beberapa vektor yang saling terkait:
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])Output:
[1] "jam" "tea" "oil"
[1] 6 1 3Tantangan
MudahLengkapi ranking(names, scores). Kembalikan satu baris untuk setiap pemain, 1. ada 95, dari skor tertinggi ke terendah. Pemain dengan skor yang sama diurutkan berdasarkan abjad.
Kode yang disediakan membaca pemain sebagai pasangan name:score yang dipisahkan oleh koma, lalu mencetak setiap baris yang dikembalikan.
Coba sendiri
ranking <- function(names, scores) {
# Tulis kodemu di sini
character(0)
}
# Kode input/output yang disediakan: biarkan apa adanya
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")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Substring dengan substr()Memformat dengan sprintf()Memisahkan dan MenggabungkanMencari stringMengganti TeksRangkuman: Pembuat Nama Pengguna4Matriks
Membuat MatriksMengakses Elemen MatriksRingkasan Baris dan KolomAritmetika MatriksRangkuman: Denah Tempat Duduk2Pencarian Nilai-Kunci
Pencarian pada Vector BernamaMemeriksa KunciMenambahkan dan Menghapus KunciMenelusuri NamaUlasan: Meja Saham5Proyek, Buku Nilai
Menambahkan SiswaMencatat Nilai8Pengurutan dan Pengelompokan
Mengurutkan VektorMengurutkan berdasarkan KunciMengelompokkan dengan split()Ringkasan KelompokUlasan: Papan Peringkat3Set dan Penghitungan
Nilai UnikOperasi setPengujian KeanggotaanMenghitung dengan table()Ulasan: Tamu Acara6Fungsi sebagai Nilai
Fungsi AnonimMengirim FungsiMengembalikan FungsiClosure dengan StateRangkuman: Aturan Diskon9Data Frame
Membuat Data FrameKolom dan BarisMemfilter BarisMenambahkan dan MengurutkanRangkuman: Laporan Penjualan12Proyek: Pelacak Pengeluaran
Mencatat PengeluaranTotal PengeluaranLatihan sendiri: Compiler R online