C: ifelse() ve if_else() arasındaki fark


dplyr if_else() fonksiyonunun, R base ifelse() fonksiyonuna göre üç avantajı vardır:

1. if_else() işlevi, if else ifadesindeki iki alternatifin aynı veri türüne sahip olup olmadığını kontrol eder.

2. if_else() işlevi Date nesnelerini sayısala dönüştürmez.

3. if_else() işlevi, NA değerlerinin nasıl işleneceğini belirtmek için “eksik” bir argüman sunar.

Aşağıdaki örnekler uygulamadaki bu farklılıkları göstermektedir.

Örnek 1: if_else(), iki alternatifin aynı türde olup olmadığını kontrol eder

R’de çeşitli basketbol oyuncuları hakkında bilgi içeren aşağıdaki veri çerçevesine sahip olduğumuzu varsayalım:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 points=c(22, 20, 28, 14, 13, 18, 27, 33))

#view data frame
df

  team points
1 to 22
2 to 20
3 to 28
4 to 14
5 B 13
6 B 18
7 B 27
8 B 33

Takım değeri “A” olan satırlara “Atlanta” değerini, farklı değere sahip satırlara ise 0 değerini atayan yeni bir sütun oluşturmak için R base ifelse() fonksiyonunu kullanırsak herhangi bir hata almayacağız. “Atlanta” bir karakter ve 0 bir sayı olmasına rağmen:

 #create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', 0)

#view updated data frame
df

  team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 0
6 B 18 0
7 B 27 0
8 B 33 0

Ancak aynı görevi gerçekleştirmek için dplyr’ın if_else() işlevini kullanırsak, if else ifadesinde iki farklı veri türü kullandığımızı bildiren bir hata alırız:

 library (dplyr)

#attempt to create new column based on values in team column
df$city <- if_else(df$team == ' A ', ' Atlanta ', 0)

Error: `false` must be a character vector, not a double vector.

Örnek 2: if_else(), tarih nesnelerini sayısal değerlere dönüştürmez

R’de bir mağazada farklı tarihlerde yapılan satışları gösteren aşağıdaki veri çerçevesine sahip olduğumuzu varsayalım:

 #create data frame
df <- data. frame (date=as. Date (c('2022-01-05', '2022-01-17', '2022-01-22',
                        '2022-01-23', '2022-01-29', '2022-02-13')),
                 sales=c(22, 35, 24, 20, 16, 19))

#view data frame
df

        dirty date
1 2022-01-05 22
2 2022-01-17 35
3 2022-01-22 24
4 2022-01-23 20
5 2022-01-29 16
6 2022-02-13 19

Tarih sütununun değerlerini değiştirmek için R base ifelse() fonksiyonunu kullanırsak, değerler otomatik olarak sayısala dönüştürülecektir:

 #if date is before 2022-01-20 then add 5 days
df$date <- ifelse(df$date < ' 2022-01-20 ', df$date+ 5 , df$date)

   dirty date
1 19002 22
2 19014 35
3 19014 24
4 19015 20
5 19021 16
6 19036 19

Ancak dplyr’ın if_else() işlevini kullanırsak tarih nesneleri tarih olarak kalacaktır:

 library (dplyr)

#if date is before 2022-01-20 then add 5 days
df$date <- ifelse(df$date < ' 2022-01-20 ', df$date+ 5 , df$date)

#view updated data frame
df

        dirty date
1 2022-01-10 22
2 2022-01-22 35
3 2022-01-22 24
4 2022-01-23 20
5 2022-01-29 16
6 2022-02-13 19

Örnek 3: if_else(), NA değerlerinin nasıl işleneceğini belirtmek için “eksik” bir argüman sunar

R’de aşağıdaki veri çerçevesine sahip olduğumuzu varsayalım:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', NA, 'B'),
                 points=c(22, 20, 28, 14, 13, 18, 27, 33))

#view data frame
df

  team points
1 to 22
2 to 20
3 to 28
4 to 14
5 B 13
6 B 18
7 <NA> 27
8 B 33

Yeni bir sütun oluşturmak için R base ifelse() işlevini kullanırsak, NA değerlerinin nasıl işleneceğini belirtmek için varsayılan bir seçenek yoktur:

 #create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', ' Boston ')

#view updated data frame
df

  team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 Boston
6 B 18 Boston
7 <NA> 27 <NA>
8 B 33 Boston

Ancak dplyr’ın if_else() işlevini kullanırsak NA değerlerinin nasıl işleneceğini belirtmek için eksik argümanı kullanabiliriz:

 library (dplyr)

#create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', ' Boston ', missing=' other ')

#view updated data frame
df

  team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 Boston
6 B 18 Boston
7 <NA> 27 other
8 B 33 Boston

Takım sütununda NA değeri bulunan satırın, yeni şehir sütununda “diğer” değerini aldığını unutmayın.

Ek kaynaklar

Aşağıdaki eğitimlerde R’de diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:

R’de birden çok koşulla If ifadesi nasıl kullanılır?
R’de iç içe geçmiş If Else ifadesi nasıl yazılır?
R’de ilk tryCatch() fonksiyonunuzu nasıl yazarsınız?

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir