我知道有关添加 leading zero
的所有问题以及为他们提供的综合响应,例如 Q1 、 Q2 、 Q3 。
但对我来说,至少根据我目前的知识,我无法解决我将要做的事情如下:
leading zero
模式匹配在 string
中添加 regex
所以,我只想在 leading zero
之后将 digits
添加到 -
。 例如 :
Sam <- c("222-88", "537-457", "652-1", "787-892")
var <- LETTERS[1:4]
DF<- data.frame(Sam, var)
DF
Sam var
1 222-88 A
2 537-457 B
3 652-1 C
4 787-892 D
预期成绩:
Sam var
1 222-088 A
2 537-457 B
3 652-001 C
4 787-892 D
我试过了 :
library(stringr)
temp <- DF[str_detect(DF$Sam, "-[0-9]{1,2}$"),] # will find the rows need the leading zero
temp
Sam var
1 222-88 A
3 652-1 C
formatC(temp$Sam, width = 2,flag = 0)# not correct!
最佳答案
我们可以用 base R
做到这一点,通过 -
分割字符串,然后在转换为 sprintf
和 numeric
后使用 paste
填充 0
DF$Sam <- sapply(strsplit(as.character(DF$Sam), "-"), function(x)
paste(x[1],sprintf("%03d", as.numeric(x[2])), sep="-"))
DF$Sam
#[1] "222-088" "537-457" "652-001" "787-892"
如果我们需要正则表达式方法,我们可以使用
gsubfn
library(gsubfn)
gsubfn("(\\d+)$", ~sprintf("%03d", as.numeric(x)), as.character(DF$Sam))
#[1] "222-088" "537-457" "652-001" "787-892"
关于r: find a pattern and edit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45968557/