Добавление начальных нулей с использованием R


Answers

Для общего решения, которое работает независимо от количества цифр в data$anim , используйте функцию sprintf . Он работает следующим образом:

sprintf("%04d", 1)
# [1] "0001"
sprintf("%04d", 104)
# [1] "0104"
sprintf("%010d", 104)
# [1] "0000000104"

В вашем случае вы, вероятно, захотите: data$anim <- sprintf("%06d", data$anim)

Question

У меня есть набор данных, который выглядит примерно так:

anim <- c(25499,25500,25501,25502,25503,25504)
sex  <- c(1,2,2,1,2,1)
wt   <- c(0.8,1.2,1.0,2.0,1.8,1.4)
data <- data.frame(anim,sex,wt)

data
   anim sex  wt anim2
1 25499   1 0.8     2
2 25500   2 1.2     2
3 25501   2 1.0     2
4 25502   1 2.0     2
5 25503   2 1.8     2
6 25504   1 1.4     2

Я хотел бы добавить ноль перед каждым идентификатором животного:

data
   anim sex  wt anim2
1 025499   1 0.8     2
2 025500   2 1.2     2
3 025501   2 1.0     2
4 025502   1 2.0     2
5 025503   2 1.8     2
6 025504   1 1.4     2

И ради интереса, что, если мне нужно добавить два или три нуля перед идентификаторами животных?




Вот еще одна альтернатива для добавления, ведущего к 0s к строкам, таким как CUSIPs которые иногда могут выглядеть как число, и многие приложения, такие как Excel, будут повреждены и удалены ведущие 0 или преобразуют их в научную нотацию.

Когда я попробовал ответ, предоставленный @metasequoia, возвращаемый вектор имел начальные пробелы, а не 0 с. Это была та же проблема, о которой упоминал @ user1816679 - и удаление котировок вокруг 0 или изменение от %d до %s тоже не имело значения. FYI, я использую RStudio Server, работающий на сервере Ubuntu. Это небольшое двухэтапное решение работало для меня:

gsub(pattern = " ", replacement = "0", x = sprintf(fmt = "%09s", ids[,CUSIP]))

используя функцию %>% pipe из пакета magrittr , она может выглядеть так:

sprintf(fmt = "%09s", ids[,CUSIP]) %>% gsub(pattern = " ", replacement = "0", x = .)

Я бы предпочел однофункциональное решение, но оно работает.




str_pad из пакета stringr является альтернативой.

anim = 25499:25504
str_pad(anim, width=6, pad="0")



Links