Необходимо добавить 0 к указанному c местоположению всех элементов, имеющих указанную c длину символа - PullRequest
1 голос
/ 03 марта 2020

Множество ответов о том, как добавить ведущие 0, однако моя ситуация такова:

У меня есть фрейм данных, где в первом столбце указаны PatientID, а для любого, который имеет только 3 символа, мне нужно добавить От 0 до 2-го символа идентификатора:

patientIDs <- c("E015", "E04", "E212") #what I have
patientIDsnew <- c("E015", "E004", "E212") #what I need
hr <- c(110, 105, 135)
df <- data.frame(patientIDs,patientIDsnew, hr)

Я полагаю, мне нужно установить ifelse, где он считает str_length, и если <4, он добавляет ноль ... но не уверен, как в сторону из первой части: </p>

library(stringr)
df$patientIDsnew <- ifelse(str_length(df$patientIDs) < 4, 

Ответы [ 3 ]

2 голосов
/ 03 марта 2020

Вот менее эффективная версия, потому что я отстой в регулярных выражениях. Разделите идентификаторы на «E». Затем, если длина любого из числовых идентификаторов c меньше 3, добавьте ноль. Затем соедините их вместе.

patientIDs %>%
  str_split_fixed("", n = 2) %>%
  as_tibble() %>%
  mutate(V2 = if_else(str_length(V2) < 3, str_pad(V2, side = "left", width = 3, pad = "0"), V2)) %>%
  mutate(new = str_c(V1, V2))

2 голосов
/ 03 марта 2020

Мы можем получить patientIDs, который содержит менее 4 символов, разбить строку на основе их позиции и вставить их вместе.

patientIDsnew <- patientIDs
inds <- nchar(patientIDsnew) < 4
patientIDsnew[inds] <- paste0(substr(patientIDsnew[inds], 1, 1), 0, 
                              substr(patientIDsnew[inds], 2,4))
patientIDsnew
#[1] "E015" "E004" "E212"
2 голосов
/ 03 марта 2020

Мы можем попробовать использовать sub для базовой опции R:

patientIDs <- c("E015", "E04", "E212")
patientIDsnew <- sub("^([A-Z])(\\d{2})$", "\\10\\2", patientIDs, perl=TRUE)
patientIDsnew

[1] "E015" "E004" "E212"

Идея здесь состоит в том, чтобы сопоставить и захватить начальную букву, а также завершить только две цифры, в отдельной группе захвата (3 ди git идентификаторы не будут совпадать). Затем мы можем заменить, добавив дополнительный ноль.

...