ifelse в r с двумя или более условиями - PullRequest
0 голосов
/ 06 февраля 2019

Как использовать условный оператор в R для определения значения в столбце на основе двух условий столбца?

Данные

Term(in month)        DayLate   NEW_STATUS
12                    0         .....
24                    24        .....
17                    30        .....
9                     15        .....
36                    21        .....

Псевдокод

if(term <= 12){
  if(DayLate <= 14)         then NEW_STATUS = "NORM"
  if(DayLate between 15~30) then NEW_STATUS = "SPECIAL"
}else if(term > 12){
  if(DayLate <= 29)         then NEW_STATUS = "NORM"
  if(DayLate between 30~89) then NEW_STATUS = "SPECIAL"
}

1 Ответ

0 голосов
/ 06 февраля 2019

Это может быть достигнуто вложенными условными выражениями с ifelse() в базе или if_else(), case_when() в dplyr .

# data
df <- structure(list(Term = c(12L, 24L, 17L, 9L, 36L), DayLate = c(0L, 
24L, 30L, 15L, 21L)), class = "data.frame", row.names = c(NA, -5L))

(1) базовый путь

within(df,
  NEW_STATUS <- ifelse(Term <= 12,
                       ifelse(DayLate <= 14, "NORM", "SPECIAL"),
                       ifelse(DayLate <= 29, "NORM", "SPECIAL"))
)

(2) dplyr

df %>% mutate(
  NEW_STATUS = case_when(
    Term <= 12 ~ if_else(DayLate <= 14, "NORM", "SPECIAL"),
    TRUE ~ ifelse(DayLate <= 29, "NORM", "SPECIAL")
  )
)

Выход

#   Term DayLate NEW_STATUS
# 1   12       0       NORM
# 2   24      24       NORM
# 3   17      30    SPECIAL
# 4    9      15    SPECIAL
# 5   36      21       NORM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...