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

R语言中调整数据框A列字符与数字的位置(含下划线)

如何调换数据框A列中字符与数字的位置(保留下划线)

问题背景

我有一个包含A、B两列的数据框:

A       B
x_1234 rs4566
x_1567 rs3566
z_1444 rs78654
r_1234 rs34567

想要把A列里数字前的字符移到数字后面,同时保留下划线,期望输出:

A       B
1234_x rs4566
1567_x rs3566
1444_z rs78654
1234_r rs34567

尝试了以下代码但没成功:

DF$A <- gsub(".*_", "_*.", DF$A)

解决方法

你之前的gsub写法没用到正则捕获组,只是做了固定文本替换,自然达不到调换位置的效果。可以用正则捕获组来精准提取并调换两部分内容:

针对单个字母前缀的情况

如果A列前缀都是单个字母,用这个代码:

DF$A <- gsub("([a-z])_(\\d+)", "\\2_\\1", DF$A)

代码说明:

  • ([a-z]):捕获下划线前的单个字母,作为第一个分组
  • _:匹配固定的下划线
  • (\\d+):捕获下划线后的一串数字,作为第二个分组
  • \\2_\\1:替换成「第二个分组(数字)+ 下划线 + 第一个分组(字母)」,实现位置调换

针对多字符前缀的情况

如果A列前缀可能有多个字母(比如ab_123),把[a-z]改成[a-z]+即可:

DF$A <- gsub("([a-z]+)_(\\d+)", "\\2_\\1", DF$A)

测试验证

用示例数据测试:

DF <- data.frame(
  A = c("x_1234", "x_1567", "z_1444", "r_1234"),
  B = c("rs4566", "rs3566", "rs78654", "rs34567")
)

DF$A <- gsub("([a-z])_(\\d+)", "\\2_\\1", DF$A)
print(DF)

输出结果完全符合预期:

A       B
1 1234_x rs4566
2 1567_x rs3566
3 1444_z rs78654
4 1234_r rs34567

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:09:24