добавление чисел к конкретным наблюдениям

#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"