在R中按条件插入字符串

在R中按条件插入字符串,r,replace,conditional-statements,gsub,R,Replace,Conditional Statements,Gsub,我有这种情况,但有更多的信息: Barcode NM00000512 NM000522 NM00000513 NM000514 我想在较短的条形码中再插入两个零,如下所示: Barcode NM00000512 NM00000522 NM00000513 NM00000514 我尝试了这个df$Barcode对最初尝试的轻微修改:不是替换所有NM000replaceNM000,只有当它后面跟的字符不是0[^0]时,才替换(),但要确保捕获它并用\\1将其放回 df$Barcode <-

我有这种情况,但有更多的信息:

Barcode
NM00000512
NM000522
NM00000513
NM000514
我想在较短的条形码中再插入两个零,如下所示:

Barcode
NM00000512
NM00000522
NM00000513
NM00000514

我尝试了这个
df$Barcode对最初尝试的轻微修改:不是替换所有
NM000
replace
NM000
,只有当它后面跟的字符不是0
[^0]
时,才替换
()
,但要确保捕获它并用
\\1
将其放回

df$Barcode <- gsub('NM000([^0])', "NM00000\\1",df$Barcode)

> df
#      Barcode
# 1 NM00000512
# 2 NM00000522
# 3 NM00000513
# 4 NM00000514
可复制数据:

df <- data.frame(
  Barcode = c("NM00000512", "NM000522", "NM00000513", "NM000514"),
  stringsAsFactors = FALSE
)

df对原始尝试的轻微修改:不替换所有
NM000
仅当它后面的字符不是0
[^0]
时,才替换
NM000
,但确保捕获它
()
,并用
\\1
将其放回

df$Barcode <- gsub('NM000([^0])', "NM00000\\1",df$Barcode)

> df
#      Barcode
# 1 NM00000512
# 2 NM00000522
# 3 NM00000513
# 4 NM00000514
可复制数据:

df <- data.frame(
  Barcode = c("NM00000512", "NM000522", "NM00000513", "NM000514"),
  stringsAsFactors = FALSE
)

df我们可以用5个0替换字符串中的所有0

sub("0+", "00000", df$Barcode)
#[1] "NM00000512" "NM00000522" "NM00000513" "NM00000514"

我们可以用5个0替换字符串中的所有0

sub("0+", "00000", df$Barcode)
#[1] "NM00000512" "NM00000522" "NM00000513" "NM00000514"
你可以用

x <- c("NM00000512","NM000522","NM00000513","NM000514")
library(stringr)
str_replace(x, "(?<=^NM)\\d+$", function(x) str_pad(x, 8, side = "left", pad = "0"))
## => [1] "NM00000512" "NM00000522" "NM00000513" "NM00000514"
详细信息

  • (?您可以使用

    x <- c("NM00000512","NM000522","NM00000513","NM000514")
    library(stringr)
    str_replace(x, "(?<=^NM)\\d+$", function(x) str_pad(x, 8, side = "left", pad = "0"))
    ## => [1] "NM00000512" "NM00000522" "NM00000513" "NM00000514"
    
    详细信息


    • (?其他答案假设零的数量(应该有五个)。我假设前面应该正好有两个字符。如果不是这样,您可以修改它以在第一个数字之前拆分字符串(或者根据应用的任何不同规则)


      barcode其他答案假设零的数量(应该有五个)。我假设前面应该正好有两个字符。如果不是这样,您可以修改它以在第一个数字之前分割字符串(或者根据应用的任何不同规则)


      条码遵循您的想法和@sindri_baldur答案,
      gsub(“(.*?[^0]0+(.*)”、\\100000\\2”,df$barcode)
      更短,假设更少。遵循您的想法和@sindri_baldur答案,
      gsub(“(.*?[^0]0+(.*)”、\\100000\\2”,df$barcode>)更短,假设更少。