R Select(), Filter(), Arrange(), Örnekle Boru Hattı
Dplyr adı verilen kütüphane, veri kümesi içinde gezinmek için değerli fiiller içerir. Bu eğitim aracılığıyla Seyahat süreleri veri kümesini kullanacaksınız. Veri seti, bir sürücünün evi ile işyeri arasında yaptığı yolculuk hakkında bilgi topluyor. Veri kümesinde aşağıdakiler dahil on dört değişken vardır:
- DayOfWeek: Sürücünün arabasını kullandığı haftanın gününü belirleyin
- Mesafe: Yolculuğun toplam mesafesi
- MaxSpeed: Yolculuğun maksimum hızı
- TotalTime: Yolculuğun dakika cinsinden uzunluğu
Veri setinde yaklaşık 200 gözlem bulunmaktadır ve sürüşler şu tarihler arasında meydana gelmiştir: Monday cumaya.
Her şeyden önce şunları yapmanız gerekir:
- veri kümesini yükle
- Verilerin yapısını kontrol edin.
Dplyr'ın kullanışlı özelliklerinden biri de bakış() işlevidir. Bu str()'ya göre bir gelişmedir. Veri kümesinin yapısını görmek ve hangi manipülasyonun gerekli olduğuna karar vermek için bakış() işlevini kullanabiliriz.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
Çıktı:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
Yorumlar değişkeninin daha fazla tanıya ihtiyaç duyduğu açıktır. Yorumlar değişkeninin ilk gözlemleri yalnızca eksik değerlerdir.
sum(df$Comments =="")
Kod Açıklama
- toplam(df$Yorumlar ==””): Gözlemlerin toplamı df'nin sütun yorumlarındaki “” değerine eşittir
Çıktı:
## [1] 181
Seçme()
Select() fiiliyle başlayacağız. Tüm değişkenlere mutlaka ihtiyacımız yok ve yalnızca ilgili bulduğunuz değişkenleri seçmek iyi bir uygulamadır.
Veri setinin neredeyse yüzde 181'ı olan 90 eksik gözlemimiz var. Bunları hariç tutmaya karar verirseniz analize devam edemezsiniz.
Diğer olasılık ise Comment değişkenini select() fiiliyle bırakmaktır.
Select() ile değişkenleri farklı şekillerde seçebiliriz. İlk argümanın veri kümesi olduğunu unutmayın.
- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset. - `select(df, A:C)`: Select all variables from A to C from df dataset. - `select(df, -C)`: Exclude C from the dataset from df dataset.
Comments değişkenini hariç tutmak için üçüncü yolu kullanabilirsiniz.
step_1_df <- select(df, -Comments) dim(df)
Çıktı:
## [1] 205 14
dim(step_1_df)
Çıktı:
## [1] 205 13
Orijinal veri kümesinde 14 özellik bulunurken step_1_df'de 13 özellik bulunur.
Filtre()
filter() fiili gözlemlerin bir kritere göre tutulmasına yardımcı olur. filter() tıpkı select() gibi çalışır, önce veri çerçevesini ve sonra virgülle ayrılmış bir koşulu geçersiniz:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Bir kriter
Her şeyden önce, bir faktör değişkeninin her seviyesindeki gözlem sayısını sayabilirsiniz.
table(step_1_df$GoingTo)
Kod Açıklama
- table(): Gözlem sayısını seviyeye göre sayın. Not: Yalnızca faktör düzeyi değişkeni kabul edilir
- table(step_1_df$GoingTo): Nihai hedefe doğru yapılan yolculukların sayısını sayın.
Çıktı:
## ## GSK Home ## 105 100
İşlev tablosu(), 105 yolculuğun GSK'ya ve 100 yolculuğun da Eve gideceğini gösterir.
Verileri, 105 gözlemli bir veri kümesini ve 100 gözlemli başka bir veri kümesini döndürecek şekilde filtreleyebiliriz.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Çıktı:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Çıktı:
## [1] 105 14
Çoklu kriter
Bir veri setini birden fazla kritere göre filtreleyebiliriz. Örneğin, varış noktasının Ev olduğu ve Çarşamba günü gerçekleştiği gözlemleri çıkarabilirsiniz.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Çıktı:
## [1] 23 14
23 gözlem bu kriterle eşleşti.
Boru Hattı
Bir veri kümesinin oluşturulması aşağıdakiler gibi birçok işlemi gerektirir:
- ithal
- birleştirme
- seçme
- süzme
- ve benzeri
Dplyr kütüphanesi, %>% adlı pratik bir operatörle birlikte gelir. boru hattı. Boru hattı özelliği, manipülasyonun temiz, hızlı ve daha az hataya yol açmasını sağlar.
Bu operatör, ara adımları sabit diske kaydetmeden adımları gerçekleştiren bir koddur. Yukarıdaki örneğimize dönerseniz ilgilendiğiniz değişkenleri seçip filtreleyebilirsiniz. Üç adımımız var:
- 1. Adım: Verileri içe aktarın: GPS verilerini içe aktarın
- Adım 2: Verileri seçin: GoingTo ve DayOfWeek'i seçin
- 3. Adım: Verileri filtreleyin: Yalnızca Ana Sayfa ve Çarşamba günlerini döndür
Bunu yapmak için zor yolu kullanabiliriz:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
Çıktı:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Bu, özellikle çok sayıda adımın olduğu bir durumda, birçok işlemi gerçekleştirmenin uygun bir yolu değildir. Ortam, depolanan birçok nesneyle sonuçlanır.
Bunun yerine %>% boru hattı operatörünü kullanalım. Başlangıçta sadece kullanılan veri çerçevesini tanımlamamız gerekiyor ve tüm süreç ondan akacak.
Boru hattının temel sözdizimi
New_df <- df %>% step 1 %>% step 2 %>% ... arguments - New_df: Name of the new data frame - df: Data frame used to compute the step - step: Instruction for each step - Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
Yukarıda sıralanan adımları izleyerek ilk pipe'ınızı oluşturabilirsiniz.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) % > % #Step 2 select(GoingTo, DayOfWeek) % > % #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
Çıktı:
## [1] TRUE
Pipeline operatörüyle çarpıcı bir veri kümesi oluşturmaya hazırız.
düzenlemek()
içinde önceki derssort() fonksiyonuyla değerleri nasıl sıralayacağınızı öğrenirsiniz. Dplyr kütüphanesinin sıralama işlevi vardır. Boru hattıyla bir cazibe gibi çalışıyor. Arrange() fiili, bir veya daha fazla satırı artan (varsayılan) veya azalan şekilde yeniden sıralayabilir.
- `arrange(A)`: Ascending sort of variable A - `arrange(A, B)`: Ascending sort of variable A and B - `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B
Mesafeyi varış noktasına göre sıralayabiliriz.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Çıktı:
## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed ## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4 ## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5 ## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7 ## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4 ## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7 ## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8 ## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All ## 1 78.4 8.45 45.7 37.0 No ## 2 89.0 8.28 35.6 32.6 Yes ## 3 87.3 7.89 38.5 33.3 Yes ## 4 77.8 8.45 41.6 37.6 No ## 5 93.2 7.81 34.3 31.5 Yes ## 6 78.8 8.54 40.4 37.3 No
ÖZET
Aşağıdaki tabloda eğitim sırasında öğrendiğiniz tüm işlemleri özetlemişsiniz.
Fiil | Nesnel | Kod | açıklama |
---|---|---|---|
belirti | bir df'nin yapısını kontrol edin |
glimpse(df) |
str() ile aynı |
Seçme() | Değişkenleri seç/hariç tut |
select(df, A, B ,C) |
A, B ve C değişkenlerini seçin |
select(df, A:C) |
A'dan C'ye tüm değişkenleri seçin | ||
select(df, -C) |
C'yi hariç tut | ||
Filtre () | Bir veya daha fazla koşulu temel alarak df'yi filtreleyin |
filter(df, condition1) |
Tek koşul |
filter(df, condition1 |
durum2) | ||
düzenlemek() | Veri kümesini bir veya daha fazla değişkenle sıralayın |
arrange(A) |
A değişkeninin artan türü |
arrange(A, B) |
A ve B değişkenlerinin artan türü | ||
arrange(desc(A), B) |
A değişkeninin azalan türü ve B değişkeninin artan türü | ||
%>% | Her adım arasında bir ardışık düzen oluşturun |
step 1 %>% step 2 %>% step 3 |