【发布时间】:2019-05-05 04:59:44
【问题描述】:
我需要对数据框中的所有分类列进行一次编码。我发现了这样的东西:
one_hot <- function(df, key) {
key_col <- dplyr::select_var(names(df), !! rlang::enquo(key))
df <- df %>% mutate(.value = 1, .id = seq(n()))
df <- df %>% tidyr::spread_(key_col, ".value", fill = 0, sep = "_") %>%
select(-.id)
}
但我不知道如何将它应用于所有分类列。
keys <- select_if(data, is.character)[-c(1:2)]
tmp <- map(keys, function(names) reduce(data, ~one_hot(.x, keys)))
抛出下一个错误
错误:
var必须计算为单个数字或列名,而不是列表
更新:
customers <- data.frame(
id=c(10, 20, 30, 40, 50),
gender=c('male', 'female', 'female', 'male', 'female'),
mood=c('happy', 'sad', 'happy', 'sad','happy'),
outcome=c(1, 1, 0, 0, 0))
customers
编码后
id gender.female gender.male mood.happy mood.sad outcome
1 10 0 1 1 0 1
2 20 1 0 0 1 1
3 30 1 0 1 0 0
4 40 0 1 0 1 0
5 50 1 0 1 0 0
【问题讨论】:
-
您能否提供一个小的示例数据框以及您希望该数据框的结果是什么样的?这将帮助人们回答您的问题。
-
完成。但想象一下,我有更多的分类特征
标签: r tidyverse one-hot-encoding