r - 使用 gsub 函数
问题描述
我有一个具有多个级别的因子,我想在所有数据的数字之间插入一个冒号,但我不知道如何为此使用 gsub 函数。示例我的数据如下所示:
ABCD*0801
ABCD*0701
ABCD*0902
ABCD*0311
ABCD*2001
我想要的是这个:
ABCD*08:01
ABCD*07:01
ABCD*09:02
ABCD*03:11
ABCD*20:01
我在下面使用了这段代码,但我不明白
gsub("(.{4})(.*)$", "\\1:\\2",hladata$DRB1_1)
你能帮我么 ?
解决方案
这里有两个选项sub
(因为每个字符串只有一个匹配项,gsub
对于每个字符串的多个匹配项,没有必要):
sub("\\d{2}", "\\1:", x)
这通过反向引用起作用:在第一个参数中匹配的模式(两个d
igits 的出现)被记住并在替换参数中重复,并将 a:
添加到其中。
sub("(?<=\\d{2})(?=\\d{2})", ":", x, perl = TRUE)
这个更复杂的解决方案适用于环视:环视(?<=\\d{2})
在匹配的左侧(?=\\d{2})
查找两位数,而在右侧查找两位数。在两个环视匹配的地方,:
插入 a。
由于量化表达式,您使用的代码不起作用;您需要将其更改为,{7}
因为在要插入的点之前有七个字符:
。它的工作方式类似于上面的第二个选项,即通过反向引用:\\1
记住并重复在第一个捕获组中捕获的前七个字符,(...)
而第二个反向引用\\2
记住并重复第二个捕获组;在它们之间:
添加。
gsub("(.{7})(.*)$", "\\1:\\2", x)
数据:
x <- as.factor(c("ABCD*0801",
"ABCD*0701",
"ABCD*0902",
"ABCD*0311",
"ABCD*2001"))
推荐阅读
- javascript - Axios 在 post 请求中发送数组
- r - 如何将列从英尺和英寸 (X'X) 转换为米?
- php - PHPExcel在存储Excel文件后释放内存
- php - 无法重定向到 php 中新创建的页面
- python - 如何将单词转换为浮点值
- javascript - Sails.js 控制器从 Promise 中获取数据
- firebase - 当 Firestore 字段更新时,Observables 会重新查询所有数据吗?
- ssl - 从 Flutter App 进行 API 调用时如何处理证书文件?
- javascript - 无法有条件地使用新值更新变量
- layout - 在没有服务器端计算的情况下定位 div 元素