Añadiendo ceros a la izquierda usando R



Answers

Para una solución general que funciona independientemente de cuántos dígitos hay en data$anim , use la función sprintf . Funciona así:

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

En tu caso, probablemente quieras: data$anim <- sprintf("%06d", data$anim)

Question

Tengo un conjunto de datos que se ve así:

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

Me gustaría agregar un cero antes de cada identificación de animal:

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

Y por el bien de los intereses, ¿qué sucede si necesito agregar dos o tres ceros antes de la identificación del animal?




Aquí hay otra alternativa para agregar CUSIPs a ceros como CUSIPs que a veces se CUSIPs un número y que muchas aplicaciones como Excel corromperán y eliminarán los ceros iniciales o los convertirán a notación científica.

Cuando probé la respuesta proporcionada por @metasequoia, el vector devuelto tenía espacios iniciales y no 0 s. Este fue el mismo problema mencionado por @ user1816679 - y eliminar las comillas alrededor del 0 o cambiar de %d a %s tampoco hizo la diferencia. FYI, estoy usando el servidor RStudio que se ejecuta en un servidor Ubuntu. Esta pequeña solución de dos pasos funcionó para mí:

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

usando la función %>% pipe del paquete magrittr podría verse así:

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

Preferiría una solución de una función, pero funciona.




str_pad del paquete stringr es una alternativa.

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



Related