Мне нужно преобразовать категориальные переменные в несколько дихотомических («фиктивных») переменных для использования в логистической регрессии. Скажем, мой фрейм данных:Как вызвать динамическое имя переменной внутри функции?
tdf <- data.frame(first=sample(c("A", "B", "C", "D"), 100, replace=T),
lobe = sample(c("RUL", "RML", "RLL", "LUL", "LLL"), 100, replace=T),
continuous=sample(1:100, 100),
smoker = sample(c("never", "less20", "more20"), 100, replace=T)
)
Я мог бы сделать вручную
first. <- with (tdf, factor (first))
dummies <- model.matrix(~ first.)
dummies <- dummies[,-1]
tdf <- cbind(tdf, dummies)
Обратите внимание, что это важно, чтобы вызвать фактор «первый». (или, что более важно, «переменная»), поскольку фиктивные переменные наследуют этот префикс в их соответствующие имена, что упрощает их идентификацию позже («variable1.factor2», «variable1.factor3» и т. д.).
Мой вопрос: Как можно это сделать с помощью функции, которая бы программно присвоить имена переменных:
dummify <- function(df, vectorOfColIndices) {
cn <- colnames(df)
for (i in vectorOfColIndices) {
t. <- with (tdf, factor (df[i])) # temporary factor
assign (cn[i], t.) # give it the proper 'Variable.' name
dummies <- model.matrix(~ ????) # Stuck here: how do I call this newly created structure?
...
}
}
Так что я могу впоследствии преобразовать фрейм данных, как это:
vd <- c(1,2,4) # columns that need to be converted into dummy vars
df <- dummify(df, vd)
см. '? Reformulate' ... –
Почему бы не использовать факторы? Вам не нужно вручную создавать фиктивные переменные при использовании R – Dason
@Dason вы можете ссылаться или отвечать на вопрос в качестве примера? мне было бы интересно .. :) –