在字母 S 和列数据框中的任何数字之间添加符号
Add symbol between the letter S and any number in a column dataframe
我正在尝试在字母 S
和数据框列中的任何数字之间添加一个 -
。所以,这是一个例子:
VariableA
TRS34
MMH22
GFSR104
GS23
RRTM55
P3
S4
我想要的输出是:
VariableA
TRS-34
MMH22
GFSR104
GS-23
RRTM55
P3
S-4
我正在尝试使用 gsub
:
gsub('^([a-z])-([0-9]+)$','\1d\2',myDF$VariableA)
但这不起作用。
我该如何解决这个问题?
谢谢!
您的 ^([a-z])-([0-9]+)$
正则表达式尝试匹配以字母开头、然后是 -
和一个或多个数字的字符串。这行不通,因为字符串中没有连字符,您想将其引入字符串中。
您可以使用
gsub('(S)([0-9])', '\1-\2', myDF$VariableA)
(S)([0-9])
正则表达式匹配并捕获 S
到第 1 组 (</code>),然后任何数字被捕获到第 2 组 (<code>
) 和替换模式是组值的串联,中间有一个连字符。
如果预期只有一个替换,请将 gsub
替换为 sub
.
参见regex demo and the online R demo。
其他变化:
gsub('(S)(\d)', '\1-\2', myDF$VariableA) # \d also matches digits
gsub('(?<=S)(?=\d)', '-', myDF$VariableA, perl=TRUE) # Lookarounds make backreferences redundant
如果您设置 perl=TRUE
:
,您也可以使用回顾
> gsub('(?<=S)([0-9]+)', '-\1', myDF$VariableA, perl=TRUE)
[1] "TRS-34" "MMH22" "GFSR104" "GS-23" "RRTM55" "P3" "S-4"
>
这是我喜欢使用的版本 sub
:
myDF$VariableA <- gsub('S(\d)', 'S-\1', myDF$VariableA)
这只需要使用一个捕获组。
使用stringr
包
library(stringr)
str_replace_all(myDF$VariableA, 'S(\d)', 'S-\1')
我正在尝试在字母 S
和数据框列中的任何数字之间添加一个 -
。所以,这是一个例子:
VariableA
TRS34
MMH22
GFSR104
GS23
RRTM55
P3
S4
我想要的输出是:
VariableA
TRS-34
MMH22
GFSR104
GS-23
RRTM55
P3
S-4
我正在尝试使用 gsub
:
gsub('^([a-z])-([0-9]+)$','\1d\2',myDF$VariableA)
但这不起作用。
我该如何解决这个问题? 谢谢!
您的 ^([a-z])-([0-9]+)$
正则表达式尝试匹配以字母开头、然后是 -
和一个或多个数字的字符串。这行不通,因为字符串中没有连字符,您想将其引入字符串中。
您可以使用
gsub('(S)([0-9])', '\1-\2', myDF$VariableA)
(S)([0-9])
正则表达式匹配并捕获 S
到第 1 组 (</code>),然后任何数字被捕获到第 2 组 (<code>
) 和替换模式是组值的串联,中间有一个连字符。
如果预期只有一个替换,请将 gsub
替换为 sub
.
参见regex demo and the online R demo。
其他变化:
gsub('(S)(\d)', '\1-\2', myDF$VariableA) # \d also matches digits
gsub('(?<=S)(?=\d)', '-', myDF$VariableA, perl=TRUE) # Lookarounds make backreferences redundant
如果您设置 perl=TRUE
:
> gsub('(?<=S)([0-9]+)', '-\1', myDF$VariableA, perl=TRUE)
[1] "TRS-34" "MMH22" "GFSR104" "GS-23" "RRTM55" "P3" "S-4"
>
这是我喜欢使用的版本 sub
:
myDF$VariableA <- gsub('S(\d)', 'S-\1', myDF$VariableA)
这只需要使用一个捕获组。
使用stringr
包
library(stringr)
str_replace_all(myDF$VariableA, 'S(\d)', 'S-\1')