仅当 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))
我有一个包含需要格式化的数字的数据框。如何仅向以 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))