Как создать полиномиальные элементы из нечисловых переменных? - PullRequest
0 голосов
/ 01 декабря 2018

Я хочу создать полиномиальную особенность (GarageGrade), которая объединяет качество гаража (GarageQual) с состоянием гаража (GarageCond) посредством умножения.Значения для GarageQual и GarageCond приведены в виде символов: Po (Плохо), Fa (Удовлетворительно), TA (Типично), Gd (Хорошо), Ex (Отлично).

str(combi$GarageQual)

Возвращение: chr [1: 2919] "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ФА" "Б-г" "ТА" ...

str(combi$GarageCond)

Возврат:chr [1: 2919] "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" "ТА" ...

Для началаЯ учел их:

combi$GarageQual <- factor(combi$GarageQual)
str(combi$GarageQual)

Возврат: Коэффициент с 5 уровнями "Ex", "Fa", "Gd", ..: 5 5 5 5 5 5 5 5 2 3 ..

combi$GarageCond <- factor(combi$GarageCond)
str(combi$GarageCond)

Возврат:> Коэффициент с 5 уровнями "Ex", "Fa", "Gd", ..: 5 5 5 5 5 5 5 5 5 ...

Теперь яхотел бы заменить вектор имен уровней факторов

c("NA", "Po", "Fa", "TA", "Gd", "Ex")

числовым вектором

c(0, 1, 2, 3, 4, 5)

, чтобы эти переменные можно было умножить для создания комбинированного элемента, например:

combi$GarageGrade <- combi$GarageQual * combi$GarageCond

Каков наилучший способ достижения моей конечной цели всеобъемлющего GarageGradevariable, который сочетает в себе GarageQual с GarageCond?Должен ли я даже учитывать уровни для начала или я должен был заменить символы непосредственно цифрами?И если так, как бы я это сделал?

1 Ответ

0 голосов
/ 01 декабря 2018

Прямой путь - создать вектор из пяти рейтингов в правильном порядке, а затем использовать match для преобразования оценок в числовые.

set.seed(22)
grades <- c( "Po", "Fa", "TA", "Gd", "Ex")
GarageQual <- sample(grades, 20, replace = TRUE)
GarageCond <- sample(grades, 20, replace = TRUE)

match(GarageQual, grades) * match(GarageCond, grades)

[1]  4  6 15 12 20 20 12 20  6  4  5  8 15  5 15  1 15  1  4  6

Подход, аналогичный тому, который выописанное выше (преобразование в коэффициент, а затем в числовое значение) будет работать при условии, что уровни факторов указаны так, что они находятся в правильном порядке.

as.numeric(factor(GarageQual, levels = grades)) * as.numeric(factor(GarageCond, levels = grades))

[1]  4  6 15 12 20 20 12 20  6  4  5  8 15  5 15  1 15  1  4  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...