You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量将R中多列Likert评分转为指定水平的因子

批量将数值型Likert评分转换为因子变量

我有一份包含Pre、Mid、Post三个时间点的Likert评分调研数据,21列评分均为数值型存储。希望一次性将这些列转换为带有指定水平和标签的因子,而非逐列重复调用factor函数。

单列转换的可行代码示例:

data$Pre_S1 <- factor(data$Pre_S1,
  levels = c(1, 2, 3, 4, 5, 6),
  labels = c(
    "Strongly Disagree", "Moderately Disagree",
    "Slightly Disagree", "Slightly Agree",
    "Moderately Agree", "Strongly Agree"
  )
)

我尝试的批量处理代码未成功:

data %>% mutate(across(
  c(
    "Pre_S1", "Pre_S2", "Pre_S3", "Pre_S4", "Pre_S5",
    "Pre_S6", "Pre_S7",
    "Mid_S1", "Mid_S2", "Mid_S3",
    "Mid_S4", "Mid_S5", "Mid_S6", "Mid_S7",
    "Post_S1", "Post_S2", "Post_S3",
    "Post_S4", "Post_S5", "Post_S6", "Post_S7"
  ),
  as.factor(data,
    levels = c(1, 2, 3, 4, 5, 6),
    labels = c(
      "Strongly Disagree", "Moderately Disagree",
      "Slightly Disagree", "Slightly Agree",
      "Moderately Agree", "Strongly Agree"
    )
  )
))

问题原因

你的批量代码有两个关键错误:

  • 使用了as.factor而非factor,且错误地将整个data数据集传入函数,而across要求函数针对每一列单独处理。
  • 未正确使用匿名函数或公式语法来传递列参数。

正确实现代码

方法1:手动指定列名

data <- data %>% mutate(across(
  c(
    "Pre_S1", "Pre_S2", "Pre_S3", "Pre_S4", "Pre_S5",
    "Pre_S6", "Pre_S7",
    "Mid_S1", "Mid_S2", "Mid_S3",
    "Mid_S4", "Mid_S5", "Mid_S6", "Mid_S7",
    "Post_S1", "Post_S2", "Post_S3",
    "Post_S4", "Post_S5", "Post_S6", "Post_S7"
  ),
  ~factor(.,
    levels = c(1, 2, 3, 4, 5, 6),
    labels = c(
      "Strongly Disagree", "Moderately Disagree",
      "Slightly Disagree", "Slightly Agree",
      "Moderately Agree", "Strongly Agree"
    )
  )
))

方法2:正则匹配列名(简化写法)

不用手动罗列21个列名,用正则表达式匹配所有符合Pre_Sn/Mid_Sn/Post_Sn格式的列:

data <- data %>% mutate(across(
  matches("^(Pre|Mid|Post)_S\\d+$"),
  ~factor(.,
    levels = c(1, 2, 3, 4, 5, 6),
    labels = c(
      "Strongly Disagree", "Moderately Disagree",
      "Slightly Disagree", "Slightly Agree",
      "Moderately Agree", "Strongly Agree"
    )
  )
))

说明

  • ~factor(., ...)是tidyverse的公式语法,.代表当前正在处理的列。
  • 执行后记得将结果重新赋值给data(或新变量),否则修改不会保存。

内容的提问来源于stack exchange,提问作者mindyeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:48:28