Как более эффективно повторно классифицировать категориальные переменные? - PullRequest
0 голосов
/ 30 марта 2020

Я практикую набор данных, где у меня есть переменная S6. Содержит 6 уровней / факторов. table этой переменной выглядит следующим образом:

bachelor   values
BBA        291
CSE        10
Math       1
Economics  33
Botany     498
Pharmacy   333

Я хочу переклассифицировать эту переменную. Например:

Pharmacy, Botany = Life Science
BBA, CSE, Math, Economics = Others

или

Pharmacy, Botany = 1
BBA, CSE, Math, Economics = 2

Я попробовал эту технику, чтобы переклассифицировать эту переменную:

bachelor[S6 %in% c("Pharmacy")] <- "Life Science"
bachelor[S6 %in% c("Botany")] <- "Life Science"
bachelor[S6 %in% c("BBA")] <- "Other"
bachelor[S6 %in% c("CSE")] <- "Other"
bachelor[S6 %in% c("Economics")] <- "Other"
bachelor[S6 %in% c("Math")] <- "Other"

Эта техника на самом деле работала для меня. Но это не практично для переменной, которая имеет более 10 факторов или уровней.

Пожалуйста, предложите мне несколько более эффективных способов переклассификации категориальных переменных.

1 Ответ

3 голосов
/ 30 марта 2020

%in% функция может принимать более одного имени переменной с правой стороны. Таким образом, вы можете сделать:

bachelor[S6 %in% c("Pharmacy", "Botany")] <- "Life Science"
bachelor[S6 %in% c("BBA", "CSE", "Economics", "Math")] <- "Other"

В качестве альтернативы вы можете создать своего рода словарь для перевода и использовать match:

dict <- c(Pharmacy="Life Science",
          Botany="Life Science",
          BBA="Other",
          CSE="Other",
          Economics="Other",
          Math="Other")

bachelor <- dict[match(S6, names(dict))]

Или, с использованием внешнего пакета:

library(lest)
bachelor <- case_when(S6 %in% c("Pharmacy", "Botany")] ~ "Life Science",
                      S6 %in% c("BBA", "CSE", "Economics", "Math") ~ "Other",
                      TRUE ~ "Rest"
                      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...