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ı olancash'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öntem | Söz Dizimi | En uygun | Notlar |
|---|---|---|---|
Parantezler [] | df[rows, cols] | Düşük seviye kontrol, programlama | Tüm R nesnelerinde çalışır |
$ | df$col | Hızlı tek sütun çıkarma | Bir veri çerçevesi değil, vektör döndürür |
subset() | subset(df, cond) | Etkileşimli filtreleme | Fonksiyonların içinde önerilmez |
dplyr::filter() | df %>% filter(cond) | Veri hatları, okunabilir kod | dplyr 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).

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çinsubset()fonksiyonu veya modern veri hatları için dplyr fiilleri olanfilter()veselect().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ınTek bir sütunu vektör olarak çıkarmak için
$kullanın:df$column_nameEtkileşimli oturumlarda okunabilir koşul tabanlı filtreleme için
subset(df, condition)kullanınTek bir sütun seçerken sonucu veri çerçevesi olarak tutmak için
drop = FALSEekleyinÜretim kodu ve veri hatları için,
subset()yerine parantez gösterimini veyadplyr::filter()'ı tercih edinSatır Seçme
İşte debt adlı bir
data frameüzerinde alt kümeleme örneği.df[rows, columns]söz dizimi, R'de alt kümelemenin temelidir. Burada3: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.