У меня есть фрейм данных с несколькими столбцами, подобными этому, с символом str.
df$A <- c("1, 26, 61", "2, 3", "2, 68", "2", "2, 3", "3, 11")
Я хочу добавить 0 только перед однозначной цифрой
Я пробовал эти коды, но не получаю желаемого результата, подобного этому
output= "01, 26, 61", "02, 03", "02, 68", "02", "02, 03", "03, 11"
df$A <- sprintf("%02s",df$A)
df$A <- str_pad(df$A, width=2, pad=0)
stringr::str_pad(df, 2, side = "left", pad = "0")
Может быть, вы можете попробовать
> x <- c("1, 26, 61", "2, 3", "2, 68", "2", "2, 3", "3, 11")
> gsub("\\b(\\d)\\b", "0\\1", x)
[1] "01, 26, 61" "02, 03" "02, 68" "02" "02, 03"
[6] "03, 11"
Привет, Томас, спасибо за твой код. Это действительно сработало и решило мою проблему. Можете ли вы объяснить немного?
@PawanRaghav \\b(\\d)\\b
захватывает отдельные цифры и 0\\1
дополняет 0
перед этой захваченной группой (представленной \\1
)
Замечательно. У меня вопрос, например, как изменить код только для двух цифр?
@PawanRaghav, какой желаемый результат только для двух цифр?
"1, 026, 061" "2, 3" "2, 068" "2" "2, 3" "3, 011" должны быть выходными данными.
@PawanRaghav, тогда используй \\b(\\d{2})\\b
Разделение каждой строки, дополнение и последующее склеивание снова обеспечит определенную гибкость ценой некоторой большей сложности:
A <- c("1, 26, 61", "2, 3", "2, 68", "2", "2, 3", "3, 11")
sapply(strsplit(A, ",\\s+"),
\(x) paste(sprintf("%02d", as.numeric(x)), collapse = ", "))
## or as Thomas notes in the comments, if the comma separated output is sufficient:
sapply(strsplit(A, ",\\s+"),
\(x) toString(sprintf("%02d", as.numeric(x))))
Оба дают:
##[1] "01, 26, 61" "02, 03" "02, 68" "02" "02, 03"
##[6] "03, 11"
или вы можете использовать toString
для более короткого кода
library(stringr)
str_replace_all(df$A, "\\d+", \(x) str_pad(x, width = 2, "left", pad = "0"))
# [1] "01, 26, 61" "02, 03" "02, 68" "02" "02, 03" "03, 11"
Спасибо за ваше время. Это действительно работает. Можете ли вы объяснить подробно, что делает (x)?
@PawanRaghav Конечно. Третий аргумент str_replace_all()
может быть функцией, принимающей совпадения. В этом случае мы фиксируем цифры и передаем их этой функции. \(x) — это сокращенное обозначение для создания анонимной функции, которая была введена в R 4.1.1. Эта безымянная функция принимает цифры, соответствующие шаблону регулярного выражения, и передает их str_pad()
, чтобы дополнить их по вашему запросу.
Возможно, будет полезно stackoverflow.com/questions/5812493/how-to-add-leading-zeros