Ana içeriğe geç

R'de Verileri Alt Kümelere Ayırma: Seçme, Filtreleme ve Çıkarma

R'de veri çerçevelerini parantezler [], subset() ve dplyr kullanarak nasıl alt kümelere ayıracağınızı öğrenin. Kod örnekleri ve yöntemlerin karşılaştırması dahildir.
· 6 dk. oku

Yapay Zeka ile Keşfedin

Hemen her R veri analizi projesi, daha büyük bir veri kümesinden belirli satırları, sütunları veya değerleri çıkarmayı içerir. R'de bunu alt kümelere ayırarak yaparsınız: düşük seviye indeksleme kontrolü için parantez gösterimi [], okunabilir koşul tabanlı filtreleme için subset() fonksiyonu veya modern veri hatları için dplyr fiilleri olan filter() ve select().

Kısa Özet

  • Satır ve sütunları konuma göre alt kümelere ayırmak için parantez gösterimini df[rows, cols] kullanın

  • Tek bir sütunu vektör olarak çıkarmak için $ kullanın: df$column_name

  • Etkileşimli oturumlarda okunabilir koşul tabanlı filtreleme için subset(df, condition) kullanın

  • Tek bir sütun seçerken sonucu veri çerçevesi olarak tutmak için drop = FALSE ekleyin

  • Üretim kodu ve veri hatları için, subset() yerine parantez gösterimini veya dplyr::filter()'ı tercih edin

Satır Seçme

İşte debt adlı bir data frame üzerinde alt kümeleme örneği.

debt[3:6, ]
      name  payment
3      Dan      150
4      Rob       50
5      Rob       75
6      Rob      100

df[rows, columns] söz dizimi, R'de alt kümelemenin temelidir. Burada 3:6, 3'ten 6'ya kadar olan satırları seçer ve virgülden sonraki boşluk "tüm sütunları döndür" anlamına gelir. Sonuç, orijinal ile aynı sütun yapısına sahip daha küçük bir veri çerçevesidir.

Belirli bir sütundan satır seçme

Dikkat edilmesi gereken davranışlardan biri, tek bir sütun seçtiğinizde gerçekleşen basitleştirmedir. Yalnızca payment sütununun ilk üç satırını seçmek, sonucu bir vektöre indirger.

debt[1:3, 2]
100 200 150

Buradaki 2, debt'in ikinci sütununa, yani payment'a karşılık gelir. Tek bir sütun seçtiğimiz için R, veri çerçevesi yapısını bırakır ve düz bir sayısal vektör döndürür.

Veri çerçevesi biçimlendirme

Bunu bir dataframe olarak tutmak için aşağıda gösterildiği gibi drop = FALSE ekleyin: 

debt[1:3, 2, drop = FALSE]
    payment
1       100
2       200
3       150

Belirli bir sütun seçme

$ operatörüyle dataframe$column yazarak tek bir sütunu da seçebilirsiniz. Aşağıdaki örnek, debt içinden payment sütununu çıkarır. R, sonucu bir veri çerçevesi yerine bir vektör olarak döndürür.

debt$payment
100 200 150 50 75 100

subset() Fonksiyonunu Kullanma

Daha karmaşık alt kümeler oluşturmak veya bir koşula dayalı alt küme almak istediğinizde, bir sonraki adım subset() fonksiyonunu kullanmaktır. Örneğin, adı Dan olan birinden gelen borçlara bakmak istiyorsunuz. Parantezleri kullanarak borcunu seçip toplayabilirsiniz, ancak bu, özellikle veri setinde olası değişiklikler olduğunda çok sağlam bir yöntem değildir.

# Bu çalışır, ancak bilgilendirici değildir
debt[1:3, ]

Kategorik bir değişkende subset()

Bunu yapmanın daha iyi bir yolu, ad sütununun Dan'e eşit olduğu satırları seçmek için subset() fonksiyonunu kullanmaktır. İlişkisel bir operatör olan çift eşittir işaretine (==) ihtiyaç olduğunu unutmayın.

# Bu çalışır, ancak ne bilgilendirici ne de sağlamdır
debt[1:3, ]

# Çok daha bilgilendirici!
subset(debt, name == "Dan")
      name     payment
1      Dan         100
2      Dan         200
3      Dan         150

Sonuç, name değerinin "Dan" olduğu üç satırı içerir. Orijinal satır numaralarının (1, 2, 3) korunduğuna dikkat edin; bu, sonuçları kaynak veri çerçevesine geri izlemeye yardımcı olur.

Sayısal bir değişkende subset()

Sayısal sütunlarda da alt kümeleme yapabiliriz. Ödemelerin 100 $'a eşit olduğu satırları görmek istiyorsak, şunu yaparsınız:

subset(debt, payment == 100)
      name  payment
1      Dan      100
6      Rob      100

İki satır koşulu karşılar: 1. satır (Dan) ve 6. satır (Rob) tam olarak 100 $ ödeme yapmıştır. Bu, subset()'in isimden bağımsız olarak her satırı taradığını ve tüm eşleşmeleri döndürdüğünü gösterir.

Veri Çerçevelerine Erişim ve Alt Kümeleme

Ya yalnızca şirket A'nın nakit akışlarına ihtiyacınız varsa? Burada subset() fonksiyonu, farklı bir veri çerçevesi olan cash'ten satırları filtreler:

subset(cash, company == "A")
      company  cash_flow  year
1           A       1000     1
2           A       4000     3
3           A        550     4

Unutmayın:

  • subset()'e verdiğiniz ilk argüman, veri çerçevenizin adı olan cash'tir.

  • company'i tırnak içine almamalısınız!

  • == eşitlik operatörüdür. İki şeyin nerede eşit olduğunu test eder ve mantıksal bir vektör döndürür.

subset() Yönteminin Etkileşimli Örneği

Aşağıdaki örnekte, subset()'i kullanarak cash içinden şirket B'ye karşılık gelen satırları seçiyor, ardından 1 yıl sonra vadesi gelen nakit akışlarını filtreliyoruz.

# Şirket B ile ilgili satırlar
subset(cash, company == "B")

# 1 yıl içinde vadesi gelen nakit akışları olan satırlar
subset(cash, year == 1)

Yukarıdaki kodu çalıştırdığınızda şu sonuçları üretir:

  company cash_flow year
4       B      1500    1
5       B      1100    2
6       B       750    4
7       B      6000    5
  company cash_flow year
1       A      1000    1
4       B      1500    1

Finans için R'ye Giriş kursumuzda kendiniz deneyin.

Bu içerik, Lore Dirick'in DataCamp’teki Finans için R'ye Giriş kursundan alınmıştır.

dplyr ile Alt Kümeleme

tidyverse paketindeki dplyr, veri çerçevelerini alt kümelere ayırmak için modern bir alternatiftir. filter() fonksiyonu satırları, select() ise sütunları seçer; her ikisi de işlemleri birbirine bağlayan boru hattı tabanlı bir söz dizimi kullanır.

library(dplyr)

# Adı "Dan" olan satırları filtrele
debt %>% filter(name == "Dan")

# Yalnızca payment sütununu seç (veri çerçevesi olarak kalır)
debt %>% select(payment)

# Birleştir: tek bir boru hattında satırları filtrele ve sütunları seç
debt %>%
  filter(payment >= 100) %>%
  select(name, payment)

subset()'ten farklı olarak, dplyr fonksiyonları diğer fonksiyonların içinde güvenilir şekilde çalışır ve aynı boru hattında gruplanmış işlemleri, birleştirmeleri ve özetlemeleri yönetir. Tek seferlik sorgular çalıştırmak yerine veri analizi iş akışları kuruyorsanız, dplyr standart araçtır.

Alt Kümeleme Yöntemlerinin Karşılaştırması

R'deki farklı alt kümeleme yöntemlerini bir tabloda karşılaştıralım:

YöntemSöz DizimiEn uygunNotlar
Parantezler []df[rows, cols]Düşük seviye kontrol, programlamaTüm R nesnelerinde çalışır
$df$colHızlı tek sütun çıkarmaBir veri çerçevesi değil, vektör döndürür
subset()subset(df, cond)Etkileşimli filtrelemeFonksiyonların içinde önerilmez
dplyr::filter()df %>% filter(cond)Veri hatları, okunabilir koddplyr paketini gerektirir

Son Düşünceler

R, verileri alt kümelere ayırmanız için birkaç yol sunar: tam kontrol için parantez gösterimi [], okunabilir etkileşimli filtreleme için subset() ve veri hatları için dplyr::filter(). Parantezler herhangi bir R nesnesinde çalışır, subset() tek seferlik keşifler için okunaklıdır ve dplyr, birden çok işlemi zincirlerken iyi ölçeklenir.

R'de veri düzenleme konusuna daha derinlemesine inmek için dplyr ile Veri Manipülasyonu kursunu veya DataCamp'teki Tidyverse'e Giriş kursunu öneririm.

R'de Subset Hakkında SSS

R'de subset() ile dplyr::filter() arasındaki fark nedir?

Her iki fonksiyon da koşullara göre satırları filtreler, ancak programlama bağlamlarında farklı davranırlar. subset() standart dışı değerlendirme kullanır; bu da etkileşimli kullanım için elverişlidir ancak kullanıcı tanımlı fonksiyonların içinde güvenilir değildir. dplyr::filter() fonksiyonların içinde güvenli çalışacak şekilde tasarlanmıştır ve birden fazla veri düzenleme adımını birbirine bağlamak için boru operatörüyle (%>%) bütünleşir.

R'de birden fazla sütunu aynı anda nasıl alt kümelerim?

Parantezlerin içine bir sütun adı veya indeks vektörü geçebilirsiniz. Örneğin, df[, c("name", "payment")] iki sütunu ada göre seçer; df[, c(1, 3)] ise konuma göre seçer. dplyr ile select(df, name, payment) veya sütunları desenle eşleştirmek için starts_with() ve contains() gibi yardımcı fonksiyonları kullanabilirsiniz.

R'de tek bir sütun seçince neden veri çerçevesi yerine vektör döner?

Parantez gösterimiyle yalnızca bir sütun seçildiğinde R sonucu varsayılan olarak basitleştirir. Bu davranış, varsayılanı TRUE olan drop parametresiyle kontrol edilir. Sonucu bir veri çerçevesi olarak tutmak için parantez ifadenize drop = FALSE ekleyin; örneğin, df[, 2, drop = FALSE].

R'de birden fazla koşula göre satırları alt kümelerim mi?

Evet. Koşulları & (VE) ve | (VEYA) operatörleriyle birleştirebilirsiniz. Örneğin, subset(df, name == "Dan" & payment > 100), adın Dan olduğu ve ödemenin 100'ü aştığı satırları döndürür. dplyr ile, koşulları filter() içinde virgüllerle ayırabilirsiniz: df %>% filter(name == "Dan", payment > 100).

Konular

İlgili