A: ifelse()와 if_else()의 차이점


dplyr if_else() 함수는 R 기본 ifelse() 함수에 비해 세 가지 장점이 있습니다.

1. if_else() 함수는 if else 문의 두 대안이 동일한 데이터 유형을 가지고 있는지 확인합니다.

2. if_else() 함수는 Date 객체를 숫자로 변환하지 않습니다.

3. if_else() 함수는 NA 값을 처리하는 방법을 지정하기 위해 “누락된” 인수를 제공합니다.

다음 예에서는 실제로 이러한 차이점을 보여줍니다.

예제 1: if_else()는 두 대안이 동일한 유형인지 확인합니다.

다양한 농구 선수에 대한 정보를 포함하는 다음과 같은 데이터 프레임이 R에 있다고 가정합니다.

 #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

R 기본 ifelse() 함수를 사용하여 팀 값이 “A”인 행에 “Atlanta” 값을 할당하고 다른 값을 가진 행에 0을 할당하는 새 열을 생성하면 오류가 발생하지 않습니다. “Atlanta”가 문자이고 0이 숫자인 경우에도:

 #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

그러나 dplyr의 if_else() 함수를 사용하여 동일한 작업을 수행하면 if else 문에서 두 가지 다른 데이터 유형을 사용했다는 오류가 표시됩니다.

 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.

예제 2: if_else()는 날짜 객체를 숫자 값으로 변환하지 않습니다.

상점에서 서로 다른 날짜에 이루어진 판매를 보여주는 다음과 같은 데이터 프레임이 R에 있다고 가정합니다.

 #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

R base ifelse() 함수를 사용하여 날짜 열의 값을 수정하면 값이 자동으로 숫자로 변환됩니다.

 #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

그러나 dplyr의 if_else() 함수를 사용하면 날짜 객체는 날짜로 유지됩니다.

 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

예제 3: if_else()는 NA 값을 처리하는 방법을 지정하기 위해 “누락” 인수를 제공합니다.

R에 다음과 같은 데이터 프레임이 있다고 가정합니다.

 #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

R 기본 ifelse() 함수를 사용하여 새 열을 생성하는 경우 NA 값을 처리하는 방법을 지정하는 기본 옵션이 없습니다.

 #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

그러나 dplyr의 if_else() 함수를 사용하면 누락된 인수를 사용하여 NA 값을 처리하는 방법을 지정할 수 있습니다.

 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

열에 NA 값이 있는 행은 새 도시 에서 ‘기타’ 값을 받습니다.

추가 리소스

다음 튜토리얼에서는 R에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

R에서 여러 조건이 있는 If 문을 사용하는 방법
R에서 중첩된 If Else 문을 작성하는 방법
R에서 첫 번째 tryCatch() 함수를 작성하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다