Преобразование одной переменной на основе переменной класса

#r

#r

Вопрос:

У меня есть набор данных, которым я пытаюсь манипулировать. Для этого мне нужно преобразовать значения атрибута wheeltype на основе значений переменных class cartype, 1 и 2. Однако, похоже, я не могу заставить это работать должным образом.

Ну, я написал некоторый код, но он выдает ошибку: недопустимый уровень фактора, сгенерированный NA.

 for( i in 1:30) {
    if(mydata$cartype[i] == 1) {
         mydata$wheeltype[i] = 1   

     }

     else {
         mydata$wheeltype[i] = 0

     }
}
 

Здесь я ожидаю, что атрибуты типа колеса будут преобразованы в 1, если тип карты равен 1, а тип карты 2 затем установит атрибуты типа колеса в 0. Мой текущий вывод изменяет атрибуты wheeltype на NA. с «недопустимым уровнем фактора, сгенерированным NA» в качестве предупреждения.

Комментарии:

1. Звучит так, как вы хотите ?ifelse .

2. убедитесь, что все ваши столбцы не являются факторами. если вы попытаетесь добавить элементы в вектор, который является фактором, вы получите эту ошибку

Ответ №1:

Вот несколько вариантов, использующих dplyr синтаксис (с использованием данных mtcars):

 library(dplyr)

data("mtcars")

# ifelse
mtcars %>%
  as_tibble(rownames = "model") %>%
  mutate(wheeltype = ifelse(cyl == 6, 1, 0))

# case_when
mtcars %>%
  as_tibble(rownames = "model") %>%
  mutate(wheeltype = case_when(cyl == 6 ~ 1,
                               cyl == 4 ~ 2,
                               cyl == 8 ~ 3,
                               T ~ NA_real_))