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
相关产品推荐
相关产品推荐

