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() 함수를 작성하는 방법