仅当 R 数据帧中的数字以 6 开头时才添加前导零

Add leading zeros only if the number starts with 6 in R dataframe

我有一个包含需要格式化的数字的数据框。如何仅向以 6 开头的数字添加前导零?所有使用 str_pad()sprintf() 的示例都不完全符合我的任务,我发现调整它们具有挑战性。我的虚拟数据框如下:

dummy_numbers
621103 
06102658  
19562106    
61102
0635467

期望的结果是:

desired_numbers
0621103 
06102658  
19562106    
061102
0635467

谢谢。

您只能将 0 添加到以 6 开头的数字。这可以写成 -

transform(df, dummy_numbers = 
              paste0(ifelse(grepl('^6', dummy_numbers), "0", ""), dummy_numbers))

#  dummy_numbers
#1       0621103
#2      06102658
#3      19562106
#4        061102
#5       0635467

没有ifelse-

inds <- grepl('^6', df$dummy_numbers)
df$dummy_numbers[inds] <- paste0(0, df$dummy_numbers[inds])
df

dplyr

您可以使用 grepl() 和正则表达式 (^) 来捕获字符串的开头。

library(tidyverse)

df %>% mutate(dummy_numbers = ifelse(grepl("^6", dummy_numbers), 
                                     paste0(0, dummy_numbers), 
                                     dummy_numbers))

或者简单地使用 gsub()sub()

df %>% mutate(dummy_numbers = gsub("^6", "06", dummy_numbers))

基础 R

df[, "dummy_numbers"] <- gsub("^6", "06", df[["dummy_numbers"]])

我们只需要一个简单的“leading-6”正则表达式:

gsub("^6", "06", dummy)
# [1] "0621103"  "06102658" "19562106" "061102"   "0635467" 

identical(gsub("^6", "06", dummy), desired)
# [1] TRUE

数据

dummy <- c("621103", "06102658", "19562106", "61102", "0635467")
desired <- c("0621103", "06102658", "19562106", "061102", "0635467")

另一种选择是使用 str_replace 捕获以 6 开头的数字,然后替换为 06:

library(tidyverse)

df %>% 
  mutate(dummy_numbers = str_replace(dummy_numbers, "^6", "06"))

输出

  dummy_numbers
1       0621103
2      06102658
3      19562106
4        061102
5       0635467

数据

df <-
  structure(list(dummy_numbers = c(
    "621103", "06102658", "19562106", 
    "61102", "0635467"
  )),
  class = "data.frame",
  row.names = c(NA,-5L))