Если еще заявление для новой переменной - PullRequest
0 голосов
/ 03 июня 2019

Я хочу кодировать месяцы в квартал и использовать для этого одну строку кода.Я кодирую финансовые кварталы.Таким образом, 4-6 месяцев - 1, 7-9 месяцев - 2 квартал, 10-12 месяцев - 3 квартал, 1-3 месяца - 4 квартал

Я пробовал утверждение ifelse, но оно выдает ошибку дляпервая часть

ACLED$quarter<- ifelse(ACLED$month==4 & ACLED$month==5 & ACLED$month==6, 1)
Error in ifelse(ACLED$month == 4 & ACLED$month == 5 & ACLED$month == 6,  : 
  argument "no" is missing, with no default

Как мне решить эту проблему?

Ответы [ 3 ]

1 голос
/ 03 июня 2019

Это просто, если вы используете пакет dplyr и функцию case_when:

   library(dplyr)

   foo <- sample(1:12, 100, replace = TRUE)

   qtr <- case_when(foo %in% 4:6 ~ 1,
             foo %in% 7:9 ~ 2,
             foo %in% 10:12 ~ 3,
             foo %in% 1:3 ~ 4)
0 голосов
/ 03 июня 2019

Я бы рекомендовал более элегантное решение case_when, которое вы уже получили. Однако ifelse также может выполнять эту работу, используя несколько функций ifelse с той же логикой, что и ответ от markhogue (+1). Смотрите документацию по ifelse; он должен знать, что делать, когда критерии не соответствуют - в этом случае есть три случая, когда это использует другой ifelse, и один, где это NA. Первый аргумент - это критерии соответствия (, если ), второй - что делать, если критерии совпадают ( get ), а третий - что делать, если критерии не соответствуют совпало ( иначе ).

set.seed(1)

df<-data.frame('mon' = sample(1:12, replace = T, size = 20))

df[,'qtr'] <- 
  ifelse(df[,'mon'] >=  1 & df[,'mon'] <=  3, 4, 
  ifelse(df[,'mon'] >=  4 & df[,'mon'] <=  6, 1, 
  ifelse(df[,'mon'] >=  7 & df[,'mon'] <=  9, 2,
  ifelse(df[,'mon'] >= 10 & df[,'mon'] <= 12, 3,  NA))))
0 голосов
/ 03 июня 2019

Это прямо с dplyr case_when.Я не уверен, что он соответствует вашей потребности в «одной строке кода».

month <- c(1,2,3,4,5,6,7,8,9,10,11,12)

df <- data.frame(month = month)

df2 <- 
  df %>% 
  mutate(Quarter = case_when(
    #Quarter 1.
    month  %in% c(1,2,3) ~ 
      "First", 
    #Quarter 2.
    month  %in% c(4,5,6) ~ 
      "Second", 
    #Quarter 3.
    month  %in% c(7,8,9) ~
      "Third", 
    #Quarter 4.
    month  %in% c(10,11,12) ~ 
      "Fourth")
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...