#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_))