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

如何对含多种列类型的数据集使用dplyr的across及mutate across功能

解决方案

报错原因

  • 语法结构错误:across()的使用方法不符合规范,转换函数需要作为across()的第二个参数传入,不能放在across()的外部。
  • 选列范围错误:未限制需要转换的列范围,直接全选所有列会让数值、逻辑类型的列和字符串做等值判断,触发类型不兼容报错。
  • 类型匹配错误:case_when默认返回的NA为逻辑类型,和前面返回的数值类型不一致,会额外触发类型警告。

最优方案(按列名匹配转换)

直接匹配列名包含s或f的满意度列,不会改动姓名、日期、考试分数、是否早到等无关列,代码如下:

library(dplyr)
test %>%
  mutate(across(c(contains("s"), contains("f")), 
                ~ case_when(
                  . == "Strongly Agree" ~ 5, 
                  . == "Agree" ~ 4,
                  . == "Neutral" ~ 3,
                  . == "Disagree" ~ 2,
                  . == "Strongly Disagree" ~ 1,
                  TRUE ~ NA_real_
                )))

可选方案(全量字符列自动转换)

如果确实需要扫描所有字符类型列做转换,可通过where(is.character)限定仅处理字符列,注意该方案会把姓名、日期等其他字符列的非满意度内容转换为NA,无特殊需求不推荐使用:

test %>%
  mutate(across(where(is.character), 
                ~ case_when(
                  . == "Strongly Agree" ~ 5, 
                  . == "Agree" ~ 4,
                  . == "Neutral" ~ 3,
                  . == "Disagree" ~ 2,
                  . == "Strongly Disagree" ~ 1,
                  TRUE ~ NA_real_
                )))

内容的提问来源于stack exchange,提问作者J.Sabree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:36:00