我有一个包含许多变量的数据集,其中一些是字符变量,我想将其转换为因子。由于要转换的变量很多,我想使用来自dplyr_0.7
. 这是我的数据中的一个最小示例:
data <- data.frame(factor1 = c("K", "V"),
factor2 = c("E", "K"),
other_var = 1:2,
stringsAsFactors = FALSE)
我有一个命名列表,其中包含data.frame
我要转换的每个变量。列表中的这些data.frame
s 都具有相同的结构,可以在此示例中看到:
codelist_list <- list(factor1 = data.frame(Code = c("K", "V"),
Bezeichnung = c("Kauf", "Verkauf"),
stringsAsFactors = FALSE),
factor2 = data.frame(Code = c("E", "K"),
Bezeichnung = c("Eigengeschaeft", "Kundengeschaeft"),
stringsAsFactors = FALSE))
我不想做的是为每个变量定义这样的因素:
mutate(df, factor1 = factor(factor1,
levels = codelist_list[["factor1"]][["Code"]],
labels = codelist_list[["factor1"]][["Bezeichnung"]]))
到目前为止,我已经尝试过以下内容:
convert_factors <- function(variable, df) {
factor_variable <- enquo(variable)
df %>%
mutate(!!quo_name(factor_variable) := factor(!!quo_name(factor_variable),
levels = codelist_list[[variable]][["Code"]],
labels = codelist_list[[variable]][["Bezeichnung"]]))
}
第一步,我想convert_factors()
通过调用convert_factors("factor1", data)
which 返回来检查我的函数是否正常工作
factor1 factor2 other_var
1 <NA> E 1
2 <NA> K 2
该变量不显示值标签,而是被替换为NA
。
最终目标是对map
我想要转换的所有变量。在这里,我试过map(c("factor1", "factor2"), convert_factors, df = data)
了,它返回了
(function (x, strict = TRUE) 中的错误:参数已被评估
我尝试按照http://dplyr.tidyverse.org/articles/programming.html的说明进行操作,但这就是我想出的全部。
有谁知道问题出在哪里(并希望向我解释我的错误)。