Как использовать цикл для преобразования категориальных данных в двоичные данные? - PullRequest
1 голос
/ 19 октября 2019

У меня есть набор данных, который сравнивает улучшение успеваемости учащихся с их методом обучения. Категориальным параметром является метод обучения, и три варианта: НЕТ (без помощи), ПОЛНЫЙ (да, помощь) и ПРОВЕРКА (помощь по мере необходимости). Чтобы настроить регрессию, мне нужно установить x1 = 1, если студент получил ПОЛНУЮ помощь, иначе x1 = 0. Мне также нужно установить x2 = 1, если ученик помечен как CHECK, иначе x2 = 0. Я также должен сделать то же самое для НЕТ помощи (x3 = 1, если ASSIST = 'NO' иначе x3 = 0). Вот что я пытаюсь сделать:

if (ACCHW$ASSIST<-"FULL") { x1=1
} else {
x1=0
}

Но я получаю ОШИБКУ: Ошибка в if (ACCHW $ ASSIST <- "FULL") {: аргумент не интерпретируется как логический. </p>

Я новичок в создании циклов в R, совет очень важен!

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Вот альтернатива dplyr !

library(dplyr)

df <- tibble(ASSIST = c("NO", "FULL", "CHECK"))

df %>% 
  mutate(x1 = ASSIST == "NO",
         x2 = ASSIST == "FULL",
         x3 = ASSIST == "CHECK") %>% 
  mutate_at(c("x1", "x2", "x3"), as.integer) # Converts to binary
0 голосов
/ 19 октября 2019

Было бы достаточно создать новый фрейм данных, сравнивая ASSIST с каждым из его значений и cbind с исходным фреймом данных. Используя следующие данные:

ACCHW <- data.frame(ASSIST = c("NO", "FULL", "CHECK"), stringsAsFactors = F)

Попробуйте это:

cbind(ACCHW,
      data.frame(x1 = ACCHW$ASSIST == "NO",
                 x2 = ACCHW$ASSIST == "FULL",
                 x3 = ACCHW$ASSIST == "CHECK"
                 )
      )

#### OUTPUT ####

  ASSIST    x1    x2    x3
1     NO  TRUE FALSE FALSE
2   FULL FALSE  TRUE FALSE
3  CHECK FALSE FALSE  TRUE

Помните, что TRUE == 1 и FALSE == 0. Если вы действительно хотите, чтобы 0 и 1 делали то же, что и выше, но с as.integer:

cbind(ACCHW,
      data.frame(x1 = as.integer(ACCHW$ASSIST == "NO"),
                 x2 = as.integer(ACCHW$ASSIST == "FULL"),
                 x3 = as.integer(ACCHW$ASSIST == "CHECK")
                 )
      )
...