Menu
CoddyTech

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 3
challenge icon

Tantangan

Mudah

Lengkapi 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")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler R online