R menyediakan berbagai cara untuk mengurutkan data baik secara menaik maupun menurun; Analis data dan data scientist menggunakan order(), sort() dan paket seperti dplyr untuk mengurutkan data tergantung pada struktur data yang diperoleh.
Ringkas
- Gunakan
sort()untuk langsung mengurutkan sebuah vektor dan mengembalikan nilai yang sudah diurutkan - Gunakan
order()untuk mendapatkan indeks yang akan mengurutkan sebuah vektor—ideal untuk mengurutkan data frame - Gunakan
dplyr::arrange()untuk pendekatan modern dan mudah dibaca saat mengurutkan data frame - Tangani nilai NA dengan parameter
na.last(TRUE menempatkan NA di akhir, FALSE di awal) - Urutkan menurun dengan
decreasing = TRUEatau dengan menggunakan tanda minus
order() dapat mengurutkan vektor, matriks, dan juga sebuah data frame dapat diurutkan naik dan turun dengan bantuannya, yang ditunjukkan di bagian akhir tutorial ini.
Sintaks order()
Fungsi sort()
Sebelum membahas order(), mari lihat fungsi sort() yang lebih sederhana. Jika order() mengembalikan indeks, sort() langsung mengembalikan nilai yang sudah diurutkan:
# Create a vector
values <- c(4, 12, 6, 7, 2, 9, 5)
# sort() returns the sorted values directly
sort(values)
[1] 2 4 5 6 7 9 12
Perbedaan utamanya adalah sort() memberikan nilai yang sudah diurutkan, sedangkan order() memberikan posisinya. Hal ini membuat order() lebih berguna untuk mengurutkan data frame, seperti yang akan kita lihat nanti.
Sintaks order()
Sintaks order() ditunjukkan di bawah ini:
order(x, decreasing = TRUE or FALSE, na.last = TRUE or FALSE, method = c("auto", "shell", "quick", "radix"))
Argumen pada order() di atas menyatakan bahwa:
- x: data frame, matriks, atau vektor
- decreasing: nilai boolean; TRUE maka urut menurun atau FALSE maka urut menaik.
- na.last: nilai boolean; TRUE maka indeks NA ditempatkan di akhir atau FALSE maka indeks NA ditempatkan di awal.
- method: metode pengurutan yang digunakan.
order() di R
Mari lihat contoh order() saat digunakan.
Kode di bawah membuat vektor y yang berisi daftar angka. Saya akan menggunakan order(y) untuk mendapatkan indeks yang akan mengurutkan angka-angka tersebut.
y <- c(4, 12, 6, 7, 2, 9, 5)
order(y)
Kode di atas menghasilkan keluaran berikut:
5 1 7 3 4 6 2
Di sini order() akan mengurutkan angka yang diberikan menurut indeksnya secara menaik. Karena angka 2 adalah yang terkecil, yang memiliki indeks lima dan angka 4 berindeks 1, dan seterusnya proses bergerak dengan pola yang sama.
y <- c(4, 12, 6, 7, 2, 9, 5)
y[order(y)]
Kode di atas menghasilkan keluaran berikut:
2 4 5 6 7 9 12
Di sini pengindeksan order dilakukan sehingga nilai sebenarnya dicetak secara menaik. Nilai diurutkan menurut indeks menggunakan order() lalu setiap nilai diakses menggunakan y[some-value].
Mengurutkan vektor menggunakan berbagai parameter di order()
Mari lihat contoh saat dataset berisi nilai berupa simbol NA (Not available/tidak tersedia).
order(x,na.last=TRUE)
x <- c(8, 2, 4, 1, -4, NA, 46, 8, 9, 5, 3)
order(x, na.last = TRUE)
Kode di atas menghasilkan keluaran berikut:
5 4 2 11 3 10 1 8 9 7 6
Di sini order() juga akan mengurutkan daftar angka yang diberikan menurut indeksnya secara menaik. Karena ada NA, indeksnya akan ditempatkan di akhir, yaitu 6 akan ditempatkan terakhir karena na.last=TRUE.
order(x,na.last=FALSE)
order(x, na.last = FALSE)
Kode di atas menghasilkan keluaran berikut:
6 5 4 2 11 3 10 1 8 9 7
Di sini order() juga akan mengurutkan daftar angka yang diberikan menurut indeksnya secara menaik. Karena ada NA, indeksnya yaitu 6 akan ditempatkan di awal karena na.last=FALSE.
order(x,decreasing=TRUE,na.last=TRUE)
order(x, decreasing = TRUE, na.last = TRUE)
Kode di atas menghasilkan keluaran berikut:
7 9 1 8 10 3 11 2 4 5 6
Di sini order() akan mengurutkan daftar angka yang diberikan menurut indeksnya secara menurun karena decreasing=TRUE: 46 yang terbesar ditempatkan pada indeks 7, dan nilai lainnya diatur secara menurun. Karena ada NA, indeks 6 akan ditempatkan terakhir karena na.last=TRUE.
order(x,decreasing=FALSE,na.last=FALSE)
order(x, decreasing = FALSE, na.last = FALSE)
Kode di atas menghasilkan keluaran berikut:
6 5 4 2 11 3 10 1 8 9 7
Di sini terdapat NA yang berindeks 6 akan ditempatkan di awal karena na.last=FALSE. order() akan mengurutkan daftar angka yang diberikan menurut indeksnya secara menaik karena decreasing=FALSE: -4 yang merupakan nilai terkecil ditempatkan pada indeks 5, dan nilai lainnya diatur secara menaik.
Mulai Belajar R Secara Gratis
R Tingkat Menengah
Mengurutkan sebuah dataframe menggunakan order()
Mari buat sebuah data frame dengan nilai populasi 10. Variabel gender terdiri dari nilai vektor 'male' dan 'female' di mana 10 nilai sampel dapat diperoleh dengan bantuan sample(), sedangkan replace = TRUE akan menghasilkan hanya nilai unik. Demikian pula, age terdiri dari nilai 25 hingga 75, bersama dengan degree dengan kemungkinan nilai c("MA," "ME," "BE," "BSCS"), yang juga akan menghasilkan nilai unik.
Tugas: Mengurutkan data yang diberikan secara menaik berdasarkan usia populasi yang ada.
Catatan: Data sampel yang ditampilkan mungkin berbeda saat Anda mencobanya di mesin lokal karena setiap kali menjalankan kode akan membuat data frame yang unik.
population <- 10
gender <- sample(c("male", "female"), population, replace = TRUE)
age <- sample(25:75, population, replace = TRUE)
degree <- sample(c("MA", "ME", "BE", "BSCS"), population, replace = TRUE)
final_data <- data.frame(gender = gender, age = age, degree = degree)
final_data
| gender | age | degree |
|---|---|---|
| male | 40 | MA |
| female | 57 | BSCS |
| male | 66 | BE |
| female | 61 | BSCS |
| female | 48 | MA |
| male | 25 | MA |
| female | 49 | BE |
| male | 52 | ME |
| female | 57 | MA |
| female | 35 | MA |
Kode di atas menghasilkan keluaran berikut, yang menunjukkan data frame baru dibuat.
gender age degree
male 40 MA
female 57 BSCS
male 66 BE
female 61 BSCS
female 48 MA
male 25 MA
female 49 BE
male 52 ME
female 57 MA
female 35 MA
Mari urutkan data frame secara menaik dengan menggunakan order() berdasarkan variabel age.
order(final_data$age)
Kode di atas menghasilkan keluaran berikut:
6 10 3 9 5 8 4 2 7 1
Karena usia 25 berada pada indeks 6 diikuti usia 35 pada indeks 10 dan demikian seterusnya, semua nilai terkait usia diatur secara menaik.
Kode di bawah berisi order [] dengan variabel age, digunakan untuk mengurutkan secara menaik di mana gender bersama informasi degree juga dicetak.
final.data[order(final.data$age),]
| gender | age | degree | |
|---|---|---|---|
| 6 | male | 25 | MA |
| 10 | female | 35 | MA |
| 1 | male | 40 | MA |
| 5 | female | 48 | MA |
| 7 | female | 49 | BE |
| 8 | male | 52 | ME |
| 2 | female | 57 | BSCS |
| 9 | female | 57 | MA |
| 4 | female | 61 | BSCS |
| 3 | male | 66 | BE |
Kode di atas menghasilkan keluaran berikut:
gender age degree
6 male 25 MA
10 female 35 MA
1 male 40 MA
5 female 48 MA
7 female 49 BE
8 male 52 ME
2 female 57 BSCS
9 female 57 MA
4 female 61 BSCS
3 male 66 BE
Keluaran di atas menunjukkan bahwa age diatur secara menaik beserta informasi gender dan degree yang sesuai.
Pengurutan Dengan arrange() dari dplyr
Untuk pendekatan yang lebih mudah dibaca dan modern, Anda dapat menggunakan fungsi arrange() dari paket dplyr. Ini sangat berguna saat bekerja dalam ekosistem tidyverse:
# Install dplyr if needed: install.packages("dplyr")
library(dplyr)
# Sort by age in ascending order
final_data %>% arrange(age)
# Sort by age in descending order
final_data %>% arrange(desc(age))
# Sort by multiple columns
final_data %>% arrange(gender, desc(age))
Fungsi arrange() sering dipilih untuk alur kerja analisis data karena terintegrasi mulus dengan fungsi dplyr lainnya seperti filter(), select(), dan mutate() menggunakan operator pipe.
Perbandingan Metode Pengurutan
| Fungsi | Mengembalikan | Terbaik Untuk | Paket |
|---|---|---|---|
sort() |
Nilai yang sudah diurutkan | Vektor | Base R |
order() |
Indeks | Data frame, pengurutan kompleks | Base R |
arrange() |
Data frame yang diurutkan | Alur kerja Tidyverse | dplyr |
setorder() |
Memodifikasi secara in-place | Dataset besar (hemat memori) | data.table |
Kesimpulan
Dalam tutorial ini, saya membahas metode penting untuk mengurutkan data di R:
sort()untuk langsung mengurutkan vektororder()untuk mendapatkan indeks guna mengurutkan vektor dan data frame- Menangani nilai NA dengan parameter
na.last dplyr::arrange()untuk pengurutan data frame yang modern dan mudah dibaca- Pengurutan multi-kolom untuk kebutuhan pengurutan yang kompleks
Untuk informasi lebih lanjut, lihat dokumentasi resmi R untuk order().
Jika Anda ingin mempelajari lebih lanjut tentang R, ikuti kursus Introduction to R dari DataCamp. Anda juga dapat mengeksplorasi tutorial data.table kami untuk manipulasi data berkinerja tinggi, atau lihat panduan kami tentang pipe di R untuk kode yang lebih bersih.
