首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列dataframe中的字母S和任意数字之间添加符号

在列dataframe中的字母S和任意数字之间添加符号
EN

Stack Overflow用户
提问于 2021-10-20 09:16:54
回答 4查看 51关注 0票数 1

我试图在数据帧的一个列中在字母-和任意数字之间添加一个S。这就是一个例子:

代码语言:javascript
复制
VariableA

TRS34
MMH22
GFSR104
GS23
RRTM55
P3
S4

我想要的输出是:

代码语言:javascript
复制
VariableA
TRS-34
MMH22
GFSR104
GS-23
RRTM55
P3
S-4

我在试着用gsub

gsub('^([a-z])-([0-9]+)$','\\1d\\2',myDF$VariableA)

但这不管用。

我怎么才能解决这个问题?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-10-20 09:18:55

您的^([a-z])-([0-9]+)$正则表达式试图匹配以字母开头的字符串,然后有一个-,然后有一个或多个数字。这不能工作,因为字符串中没有连字符,您希望将它引入字符串中。

您可以使用

代码语言:javascript
复制
gsub('(S)([0-9])', '\\1-\\2', myDF$VariableA)

(S)([0-9])正则表达式匹配并将S捕获到第1组(\1),然后将任何数字捕获到第2组(\2),替换模式是组值与中间连字符的连接。如果预期的替换只有一个,则将gsub替换为sub

请参阅regex演示在线R演示

其他变动:

代码语言:javascript
复制
gsub('(S)(\\d)', '\\1-\\2', myDF$VariableA)             # \d also matches digits
gsub('(?<=S)(?=\\d)', '-', myDF$VariableA, perl=TRUE)   # Lookarounds make backreferences redundant
票数 1
EN

Stack Overflow用户

发布于 2021-10-20 09:22:44

下面是我喜欢使用sub的版本

代码语言:javascript
复制
myDF$VariableA <- gsub('S(\\d)', 'S-\\1', myDF$VariableA)

这需要只使用一个捕获组。

票数 1
EN

Stack Overflow用户

发布于 2021-10-20 09:24:32

使用stringr软件包

代码语言:javascript
复制
library(stringr)
str_replace_all(myDF$VariableA, 'S(\\d)', 'S-\\1')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69643358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档