使用变量和级别列表,使用dplyr将字符数据转换为因子
我正在处理调查数据,我需要将响应值编码为因素(例如,强烈不同意、不同意、同意、强烈同意)。不同的问题有不同的回答选项,需要适当编码。我有一个excel文件,列出了每个问题和有序的回答选项。我已经为编写了一个使用变量和级别列表,使用dplyr将字符数据转换为因子,r,dplyr,purrr,R,Dplyr,Purrr,我正在处理调查数据,我需要将响应值编码为因素(例如,强烈不同意、不同意、同意、强烈同意)。不同的问题有不同的回答选项,需要适当编码。我有一个excel文件,列出了每个问题和有序的回答选项。我已经为编写了一个循环来转换所有变量,但我想了解如何使用purr或dplyr语法 下面是一个简单的例子: library(tidyverse) dat <- iris %>% mutate( Species = as.character(Species), second_va
循环来转换所有变量,但我想了解如何使用purr
或dplyr
语法
下面是一个简单的例子:
library(tidyverse)
dat <- iris %>%
mutate(
Species = as.character(Species),
second_var = as.character(round(Sepal.Length)))
factor_map <- data.frame(
var = c("Species", "second_var"),
response_opts = c("setosa,versicolor,virginica",
"4,5,6,7,8"))
# convert character string of options into lists
factor_map2 <- factor_map %>%
mutate(levels = str_split(response_opts, ","))
# simple for loop
dat2 <- dat
for (i in 1:nrow(factor_map2)) {
v <- factor_map2$var[i]
l <- factor_map2$levels[[i]]
dat2[[v]] = factor(dat2[[v]], levels = l)
rm(v, l)
}
# How to use factor_map to convert the columns in dat to factors?
# map2 doesn't seem to work, unclear why it says .x has length of 6
dat %>%
map2(factor_map2$var, factor_map2$levels,
function(x, y) factor(x, levels = y))
# Can I pass a vector of variable specific levels into across?
dat %>%
mutate(across(factor_map2$var, factor, # somehow pass in the levels
库(tidyverse)
dat%
变异(
种类=作为特征(种类),
第二个变量=性状(圆形(萼片长度)))
因子_map可以是
map2_dfc(factor_map2$var, factor_map2$levels,
~ factor(dat[[.x]], levels = .y))%>%
setNames(factor_map2$var)
或者不使用任何新软件包(即仅使用dplyr)的另一个选项是
dat %>%
mutate(across(all_of(factor_map2$var), ~ factor(., levels =
factor_map2$levels[match(cur_column(), factor_map2$var)])))
它们已经被编码为因子。如果不清楚的话,我写了一个for循环,它可以满足我的需要,但是我在寻求帮助,了解如何用不同的方法解决问题。谢谢,这很有帮助。我发现我的purrr错误是在要修改的数据中使用管道,而不是在保存要迭代的参数的表中使用管道。