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

如何用mutate(across)批量清理数据框多列的/和\字符

两种数据清理方法实现(基于dplyr)

先加载所需工具包:

library(dplyr)
library(stringr)

原始数据框:

df <- structure(list(ID = c("Tom", "Jerry"), Subject1 = c("/Art", "/ELA"), Subject2 = c("\\Math", "/Math"), Subject3 = c("PE", "\\Bio\\2"), Subject4 = c(NA, "\\Music\\1")), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"))

方法1:移除开头的\或/

使用mutate(across())指定处理所有以Subject开头的列,通过gsub匹配开头的\或/并替换为空字符串:

df_clean1 <- df %>%
  mutate(across(starts_with("Subject"), ~ gsub("^[\\\\/]", "", .x)))

输出结果:

> df_clean1
# A tibble: 2 × 5
  ID    Subject1 Subject2 Subject3 Subject4
  <chr> <chr>    <chr>    <chr>    <chr>   
1 Tom   Art      Math     PE       NA      
2 Jerry ELA      Math     Bio\\2   Music\\1

方法2:统一开头为\,并替换/为\

分两步处理:先将所有/替换为\,再给不以\开头的内容添加\:

df_clean2 <- df %>%
  mutate(across(starts_with("Subject"), ~ {
    # 替换所有/为\
    temp <- gsub("/", "\\\\", .x)
    # 给非\开头的内容添加前缀\
    str_replace(temp, "^([^\\\\].*)", "\\\\\\1")
  }))

输出结果:

> df_clean2
# A tibble: 2 × 5
  ID    Subject1 Subject2 Subject3 Subject4
  <chr> <chr>    <chr>    <chr>    <chr>   
1 Tom   \\Art    \\Math   \\PE     NA      
2 Jerry \\ELA    \\Math   \\Bio\\2 \\Music\\1

注:正则表达式中的\需要双重转义(写成\\\\),因为R字符串本身和正则引擎各需要一次转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:09:23