【发布时间】:2017-08-08 14:56:36
【问题描述】:
我有一个包含许多变量的数据集,其中一些是字符变量,我想将其转换为因子。由于要转换的变量很多,我想使用来自dplyr_0.7 的新 tidy eval 功能来完成此操作。这是我的数据中的一个最小示例:
data <- data.frame(factor1 = c("K", "V"),
factor2 = c("E", "K"),
other_var = 1:2,
stringsAsFactors = FALSE)
我有一个命名列表,其中包含我要转换的每个变量的data.frame。列表中的这些data.frames 都具有相同的结构,可以在此示例中看到:
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("factor1", data) 来检查我的函数convert_factors() 是否正常工作
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 的指示进行操作,但这就是我想出的全部内容。
有谁知道问题出在哪里(希望能向我解释我的错误)。
【问题讨论】: