#r #dataframe #padding
#r #фрейм данных #заполнение
Вопрос:
У меня есть несколько идентификаторов, с которыми я работаю. Я хочу добавить начальный ноль для значений, которые имеют 1 целое число после тире в id. Вот пример данных. Я
id
2034-5
1023-12
1042-22
1231-9
Я хочу это:
id
2034-05
1023-12
1042-22
1231-09
Я пробовал это, но это не работает. Есть какой-нибудь совет?
x <-sprintf("d", df$id)
Ответ №1:
На самом деле вы могли бы использовать sub
here для базовой опции R:
df$id <- sub("-(\d)$", "-0\1", df$id)
df
id
1 2034-05
2 1023-12
3 1042-22
4 1231-09
Данные:
df <- data.frame(id=c("2034-5", "1023-12", "1042-22", "1231-9"), stringsAsFactors=FALSE)
Ответ №2:
Чтобы использовать sprintf
, вам нужно выделить оба числа, использовать sprintf
на втором номере, а затем снова объединить их.
library(dplyr)
library(tidyr)
df %>%
separate(id, c('id1', 'id2')) %>%
mutate(id2 = sprintf('s', id2)) %>%
unite(id, id1, id2, sep = '-')
# id
#1 2034-05
#2 1023-12
#3 1042-22
#4 1231-09
Ответ №3:
Опция с strsplit
и sprintf
из base R
df$id <- sapply(strsplit(df$id, "-"), function(x)
do.call(sprintf, c(as.list(x), fmt = "%s-s")))
df$id
#[1] "2034-05" "1023-12" "1042-22" "1231-09"