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

在R语言中将字符串中的数字移至末尾的实现方法求助

解决方案

你的问题出在正则表达式的捕获组使用错误:你只定义了1个捕获组(\\d),但替换时用了\\2,这会导致数字后面的空格被空内容替换,出现1AN这类拼接错误。以下是两种可行的实现方式:

方法一:分步处理(直观易懂)

使用stringr工具包的函数先提取数字,再移除原字符串中的数字,最后将数字拼接至末尾:

library(dplyr)
library(stringr)

df <- df %>%
  mutate(
    # 提取字符串中的1-2位数字
    num = str_extract(a, "\\d{1,2}"),
    # 移除原字符串中的数字及其前后的空格
    a = str_remove(a, "\\s*\\d{1,2}\\s*"),
    # 将数字拼接至处理后的字符串末尾
    a = str_c(a, " ", num)
  ) %>%
  # 移除临时生成的num列
  select(-num)

运行后得到的结果:

# A tibble: 2 x 1
  a                     
  <chr>                 
1 THIS IS AN EXAMPLE 1
2 THIS IS AN EXAMPLE 2

方法二:单步正则替换

通过定义多个捕获组,一次性完成替换:

df <- df %>%
  dplyr::mutate(a = gsub("^(.*)\\s+(\\d{1,2})\\s+(.*)$", "\\1 \\3 \\2", a))

正则说明:

  • ^(.*):捕获数字前的所有内容
  • \\s+(\\d{1,2})\\s+:捕获1-2位数字及其前后的空格
  • (.*)$:捕获数字后的所有内容
  • 替换规则\\1 \\3 \\2:将数字前内容 + 数字后内容 + 空格 + 数字拼接起来

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:40:17