Как добавить переменную сумму 0 в начало двух столбцов? - PullRequest
1 голос
/ 04 мая 2020

У меня есть df:

    ZIP_CODE    PO_NAME STATE ZCTA
1      501 Holtsville    NY   11742
2      544 Holtsville    NY   11742
3      601   Adjuntas    PR   601
4      602     Aguada    PR   602
5      1002   Boston     MA   1002
6      90210 Los Angeles CA   90210

Я хотел бы сделать так, чтобы почтовые коды и столбец ZCTA состояли из пяти цифр, добавляя нули перед текущими значениями, если они состоят из 3 или 4 цифр. Например, 501 станет 00501. Как это сделать?

Вывод:

    ZIP_CODE    PO_NAME STATE ZCTA
1      00501 Holtsville    NY   11742
2      00544 Holtsville    NY   11742
3      00601   Adjuntas    PR   00601
4      00602     Aguada    PR   00602
5      01002    Boston     MA   01002
6      90210   Los Angeles CA   90210

Ответы [ 2 ]

3 голосов
/ 04 мая 2020

Вы можете использовать stringr::str_pad:

library(stringr)
df %>% mutate(ZIP_CODE = str_pad(ZIP_CODE, 5, pad = "0", side = "left"),
              ZCTA = str_pad(ZCTA, 5, pad = "0", side = "left"))
3 голосов
/ 04 мая 2020

Мы можем использовать sprintf (при условии, что столбцы являются цифрами c)

df1$ZIP_CODE <- sprintf("%05d", df1$ZIP_CODE)
df1$ZCTA <- sprintf("%05d", df1$ZCTA)

Или сделать это за один шаг

df1[c("ZIP_CODE", "ZCTA")] <- lapply(df1[c("ZIP_CODE", "ZCTA")], 
           sprintf, fmt = "%05d")

Или в tidyverse/stringr

library(dplyr)
library(stringr)
df1 %>%
    mutate_at(vars(ZIP_CODE, ZCTA), str_pad, width = 5, pad = '0')
#  ZIP_CODE     PO_NAME STATE  ZCTA
#1    00501  Holtsville    NY 11742
#2    00544  Holtsville    NY 11742
#3    00601    Adjuntas    PR 00601
#4    00602      Aguada    PR 00602
#5    01002      Boston    MA 01002
#6    90210 Los Angeles    CA 90210

данные

df1 <- structure(list(ZIP_CODE = c(501L, 544L, 601L, 602L, 1002L, 90210L
), PO_NAME = c("Holtsville", "Holtsville", "Adjuntas", "Aguada", 
"Boston", "Los Angeles"), STATE = c("NY", "NY", "PR", "PR", "MA", 
"CA"), ZCTA = c(11742L, 11742L, 601L, 602L, 1002L, 90210L)),
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...