Ana içeriğe geç

R'de Veri Nasıl Sıralanır: Kapsamlı Bir Eğitim

order(), sort() ve dplyr'ın arrange() fonksiyonlarını kullanarak R'de vektörleri, veri çerçevelerini ve daha fazlasını pratik örneklerle nasıl sıralayacağınızı öğrenin.
· 6 dk. oku

Yapay Zeka ile Keşfedin

R, verileri artan veya azalan düzende sıralamak için farklı yollar sunar; veri analistleri ve veri bilimcileri elde edilen verinin yapısına bağlı olarak verileri sıralamak için order(), sort() ve dplyr gibi paketler kullanır.

Özet

  • Bir vektörü doğrudan sıralayıp sıralı değerleri döndürmek için sort() kullanın
  • Bir vektörü sıralayacak indisleri elde etmek için order() kullanın — veri çerçevelerini sıralamak için idealdir
  • Veri çerçevelerini modern ve okunabilir biçimde sıralamak için dplyr::arrange() kullanın
  • na.last parametresiyle NA değerlerini yönetin (TRUE NA'leri sona, FALSE başa koyar)
  • Azalan sırada sıralamak için decreasing = TRUE veya eksi işareti kullanın

order() vektör, matris sıralayabilir; ayrıca bir veri çerçevesi de onun yardımıyla artan ve azalan düzende sıralanabilir; bunun gösterimi bu eğitimin son bölümünde yer almaktadır.

Syntax of order()

The sort() function

order()'a geçmeden önce, daha basit olan sort() fonksiyonuna bakalım. order() indis döndürürken, sort() doğrudan sıralı değerleri döndürür:

# 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

Temel fark, sort()'un size gerçek sıralı değerleri, order()'ın ise konumları vermesidir. Bu nedenle, ileride göreceğimiz gibi, order() veri çerçevelerini sıralamak için daha kullanışlıdır.

Syntax of order()

order()'ın söz dizimi aşağıda gösterilmiştir:

order(x, decreasing = TRUE or FALSE, na.last = TRUE or FALSE, method = c("auto", "shell", "quick", "radix"))

order() içindeki yukarıdaki argümanlar şunları ifade eder:

  • x: data frame'ler, matrisler veya vektörler
  • decreasing: boolean değer; TRUE ise azalan, FALSE ise artan düzende sıralar.
  • na.last: boolean değer; TRUE ise NA indisleri en sona, FALSE ise en başa yerleştirilir.
  • method: kullanılacak sıralama yöntemi.

order() in R

Şimdi order()'ın kullanımına bir örnek bakalım.

Aşağıdaki kod, bir sayı listesini içeren y adlı bir vektör oluşturur. Bu sayıların nasıl sıralanacağını veren indisleri elde etmek için order(y) kullanacağım.

y <- c(4, 12, 6, 7, 2, 9, 5)
order(y)

Yukarıdaki kod aşağıdaki çıktıyı verir:

5 1 7 3 4 6 2

Burada order(), verilen sayıları artan düzende indislerine göre sıralar. En küçük sayı 2 olduğundan indisi beştir ve sayı 4'ün indisi 1'dir; benzer şekilde süreç aynı desenle ilerler.

y <- c(4, 12, 6, 7, 2, 9, 5)
y[order(y)]

Yukarıdaki kod aşağıdaki çıktıyı verir:

2 4 5 6 7 9 12

Burada sıralama indisleri kullanılarak gerçek değerler artan düzende yazdırılmıştır. Değerler önce order() ile indise göre sıralanır, ardından her değer y[some-value] kullanılarak erişilir.

order() içinde farklı parametreler kullanarak vektör sıralama

Değer setlerinde NA (Not available) simgesinin bulunduğu bir örneğe bakalım.

order(x,na.last=TRUE)

x <- c(8, 2, 4, 1, -4, NA, 46, 8, 9, 5, 3)
order(x, na.last = TRUE)

Yukarıdaki kod aşağıdaki çıktıyı verir:

5 4 2 11 3 10 1 8 9 7 6

Burada order() verilen sayı listesini artan düzende indislerine göre sıralar. NA bulunduğundan, 6 indisi na.last=TRUE nedeniyle en sona yerleştirilir.

order(x,na.last=FALSE)

order(x, na.last = FALSE)

Yukarıdaki kod aşağıdaki çıktıyı verir:

6 5 4 2 11 3 10 1 8 9 7

Burada order() verilen sayı listesini yine artan düzende indislerine göre sıralar. NA bulunduğundan, 6 olan indisi na.last=FALSE nedeniyle en başa yerleştirilir.

order(x,decreasing=TRUE,na.last=TRUE)

order(x, decreasing = TRUE, na.last = TRUE)

Yukarıdaki kod aşağıdaki çıktıyı verir:

7 9 1 8 10 3 11 2 4 5 6

Burada order(), decreasing=TRUE nedeniyle verilen sayı listesini azalan düzende indislerine göre sıralar: 46 en büyük olduğundan 7. indistedir ve diğer değerler azalan şekilde yerleştirilir. NA bulunduğundan 6 indisi na.last=TRUE nedeniyle en sona yerleştirilir.

order(x,decreasing=FALSE,na.last=FALSE)

order(x, decreasing = FALSE, na.last = FALSE)

Yukarıdaki kod aşağıdaki çıktıyı verir:

6 5 4 2 11 3 10 1 8 9 7

Burada NA mevcuttur ve indisi 6 olduğundan na.last=FALSE nedeniyle en başa yerleştirilir. order(), decreasing=FALSE nedeniyle verilen sayı listesini artan düzende indislerine göre sıralar: en küçük olan -4, 5. indistedir ve diğer değerler artan şekilde düzenlenir.

order() kullanarak bir veri çerçevesini sıralama

Nüfus değerinin 10 olduğu bir veri çerçevesi oluşturalım. Cinsiyet değişkeni, sample() yardımıyla 10 örnek değer üretilebilen 'male' ve 'female' vektör değerlerinden oluşur; replace = TRUE ise yalnızca benzersiz değerler üretecektir. Benzer şekilde, yaş 25 ile 75 arasındaki değerlerden ve olası dereceler c("MA," "ME," "BE," "BSCS") olacak şekilde oluşturulur; bu da yine benzersiz değerler üretecektir.

Görev: Verilen verileri, verilen nüfusun yaşına göre artan düzende sıralamak.

Not: Gösterilen örnek veriler, kodu yerel makinenizde çalıştırdığınızda farklılık gösterebilir; çünkü her çalıştırmada benzersiz bir veri çerçevesi oluşturulur.

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
genderagedegree
male40MA
female57BSCS
male66BE
female61BSCS
female48MA
male25MA
female49BE
male52ME
female57MA
female35MA

Yukarıdaki kod, yeni oluşturulan bir veri çerçevesini gösteren aşağıdaki çıktıyı verir.

  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

Veri çerçevesini, yaş değişkenine göre order() kullanarak artan düzende sıralayalım.

order(final_data$age)

Yukarıdaki kod aşağıdaki çıktıyı verir:

6 10 3 9 5 8 4 2 7 1

Yaş 25, 6. indistedir; onu 35 yaşıyla 10. indis izler ve benzer şekilde tüm yaş değerleri artan düzende sıralanır.

Aşağıdaki kodda, yaş değişkeniyle birlikte [] sıralaması kullanılır; böylece cinsiyet ve derece bilgileri de yazdırılarak artan düzende düzenleme yapılır.

final.data[order(final.data$age),]
 genderagedegree
6male25MA
10female35MA
1male40MA
5female48MA
7female49BE
8male52ME
2female57BSCS
9female57MA
4female61BSCS
3male66BE

Yukarıdaki kod aşağıdaki çıktıyı verir:

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

Yukarıdaki çıktı, yaşın ilgili cinsiyet ve derece bilgileriyle birlikte artan düzende sıralandığını gösterir.

dplyr'ın arrange() Fonksiyonu ile Sıralama

Daha okunabilir ve modern bir yaklaşım için, dplyr paketindeki arrange() fonksiyonunu kullanabilirsiniz. Bu, özellikle tidyverse ekosistemiyle çalışırken faydalıdır:

# 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))

arrange() fonksiyonu, pipe operatörünü kullanarak filter(), select() ve mutate() gibi diğer dplyr fonksiyonlarıyla sorunsuz entegre olduğu için veri analizi iş akışlarında sıklıkla tercih edilir.

Sıralama Yöntemlerinin Karşılaştırması

FunctionReturnsBest ForPackage
sort()Sıralı değerlerVektörlerBase R
order()İndislerVeri çerçeveleri, karmaşık sıralamalarBase R
arrange()Sıralanmış veri çerçevesiTidyverse iş akışlarıdplyr
setorder()Yerinde değiştirirBüyük veri kümeleri (bellek verimli)data.table

Sonuç

Bu eğitimde, R'de verileri sıralamanın temel yöntemlerini ele aldım:

  • Vektörleri doğrudan sıralamak için sort()
  • Vektörleri ve veri çerçevelerini sıralamak için indis elde etmeye yarayan order()
  • na.last parametresiyle NA değerlerinin yönetimi
  • Modern ve okunabilir veri çerçevesi sıralaması için dplyr::arrange()
  • Karmaşık sıralama gereksinimleri için çok sütunlu sıralama

Daha fazla bilgi için order() için resmi R dokümantasyonuna bakın.

R hakkında daha fazla bilgi edinmek isterseniz DataCamp'in Introduction to R kursunu alın. Yüksek performanslı veri işleme için data.table eğitimimizi inceleyebilir veya daha temiz kod için R'de pipe rehberimize göz atabilirsiniz.

Konular

İlgili