如何为R数据集中多个q开头变量统一设置因子水平?
批量设置问卷变量的因子水平
数据集示例
| Sex | q1 | q... | q10 |
|---|---|---|---|
| Male | Agree | Strongly agree | Strongly disagree |
| Female | Disagree | Agree | Disagree |
| Male | Agree | Strongly agree | Disagree |
| Female | Disagree | Agree | Strongly disagree |
高效批量处理方法
方法1:Base R 实现
无需额外依赖,用基础R函数完成批量处理:
# 定义统一的因子水平顺序 factor_levels <- c("Strongly disagree", "Disagree", "Agree", "Strongly agree") # 筛选所有以"q"加数字开头的问卷列(匹配q1、q2...q10) q_columns <- grep("^q\\d+", colnames(df)) # 批量转换为因子(ordered=TRUE可选,需要有序因子时添加) df[q_columns] <- lapply(df[q_columns], factor, levels = factor_levels, ordered = TRUE)
方法2:tidyverse/dplyr 实现(推荐)
用dplyr的across函数(1.0.0及以上版本)简化代码:
library(dplyr) factor_levels <- c("Strongly disagree", "Disagree", "Agree", "Strongly agree") # 批量转换所有以"q"开头的列 df <- df %>% across(starts_with("q"), ~factor(., levels = factor_levels, ordered = TRUE))
如果使用旧版dplyr(低于1.0.0),可以用mutate_at替代:
df <- df %>% mutate_at(vars(starts_with("q")), factor, levels = factor_levels, ordered = TRUE)
内容的提问来源于stack exchange,提问作者Tormod
相关产品推荐
相关产品推荐

