Условно создаем новую переменную - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть следующий data.frame.Мне нужно создать шестую переменную (SAT_NEWS) следующим образом: Если по трем из четырех переменных ($ medwell_.) Респондент ответил «Очень хорошо» ИЛИ «Довольно хорошо», значение новой переменной - SAT, в противном случае -такое NON_SAT.

'data.frame':   41953 obs. of  5 variables:
 $ trust_gov       : Factor w/ 6 levels "A lot","Somewhat",..: 1 2 2 2 1 2 4 2 2 2 ...
 $ medwell_accuracy: Factor w/ 7 levels "Very well","Somewhat well",..: 2 4 2 3 4 2 1 1 1 1 ...
 $ medwell_leaders : Factor w/ 7 levels "Very well","Somewhat well",..: 2 3 2 4 4 3 1 2 1 1 ...
 $ medwell_unbiased: Factor w/ 7 levels "Very well","Somewhat well",..: 4 4 2 4 3 2 1 2 1 3 ...
 $ medwell_coverage: Factor w/ 7 levels "Very well","Somewhat well",..: 2 4 1 3 3 2 1 1 2 3 ...
 - attr(*, "variable.labels")= Named chr  "ID. Respondent ID" "Survey" "Country" "QSPLIT. Split form A or B" ...
  ..- attr(*, "names")= chr  "ID" "survey" "Country" "qsplit" ...
 - attr(*, "codepage")= int 65001

Можете ли вы мне помочь?

1 Ответ

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

К сожалению, для фреймов данных нет метода %in%, поэтому требуется дополнительная работа.С базой R мы можем использовать

nm <- grep("medwell_", names(df))
num <- colSums(apply(df[, nm], 1, `%in%`, c("Very well", "Somewhat well")))
df$new <- ifelse(num == 3, "SAT", "NON_SAT")

, в то время как с dplyr мы имеем

df %>% 
  mutate(
    new = ifelse(
      select(., contains("medwell_")) %>% 
        map2_dfr(list(c("Very well", "Somewhat well")), `%in%`) %>%
        rowSums() == 3, "SAT", "NON_SAT"
    )
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...