Imagine у вас есть набор данных с категориальной переменной, и вы хотите, чтобы превратить его в фиктивные переменные:R Использование анонимной функции для создания фиктивных переменных
df<-data.frame(read.table(header = TRUE, text =
"ID Mobile
1 Yes
2 No
3 Yes
4 Yes
5 No"))
Я обычно делаю это следующим образом:
for(level in levels(df$Mobile)){
df[paste("Mobile", level, sep = "_")] <- ifelse(df$Mobile == level, 1, 0)
}
Это прекрасно работает. Однако теперь представьте, что у вас много таких категориальных переменных. Вместо того, чтобы копировать и вставлять эти три строки кода несколько раз, вы хотите использовать анонимную функцию. Я попробовал его следующим образом:
Mediatable<-function(VARIABLE1, DUMMY1, INDICATOR1){
for(level in levels(VARIABLE1)){
df[paste(DUMMY1, level, sep = "_")] <- ifelse(VARIABLE1 == level, 1, 0)
}
}
Я бы тогда запустить его следующим образом:
Mediatable(df$Mobile, "Mobile")
Я попробовал это, и ничего не произошло. Любая идея, что пошло не так? Мне очень нравится идея использования анонимной функции для выполнения этой работы по целому ряду категориальных переменных. BTW, пожалуйста, проигнорируйте, что я хочу назначить конкретное имя моим фиктивным переменным, используя вставку. Здесь это не имеет значения. Благодаря!
Ваша функция не возвращает значение. добавьте 'return (df)' вне цикла for –
@PierreLafortune, это так верно! Большое спасибо за это! Отправьте его как ответ, и я сразу же помету его! Спасибо друг! – DomB
Попробуйте 'model.matrix (~ Mobile + 0, df)' –