Beaucoup de réponses pour savoir comment ajouter des 0 non significatifs, mais ma situation est la suivante:
J'ai un dataframe où la première colonne est des patientsID, et pour ceux qui n'ont que 3 caractères, je dois ajouter un 0 au 2ème caractère de l'ID:
library(stringr) df$patientIDsnew <- ifelse(str_length(df$patientIDs) < 4,
Je suppose que je dois configurer un ifelse où il compte la str_length, et si
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)
3 Réponses :
Nous pouvons essayer d'utiliser sub
pour une option de base R:
patientIDs <- c("E015", "E04", "E212") patientIDsnew <- sub("^([A-Z])(\\d{2})$", "\\10\\2", patientIDs, perl=TRUE) patientIDsnew [1] "E015" "E004" "E212"
L'idée ici est de faire correspondre et de capturer la première lettre ainsi que les deux chiffres de fin uniquement , dans un groupe de capture séparé (les ID à 3 chiffres ne correspondent pas). Ensuite, nous pouvons remplacer en ajoutant un zéro de remplissage.
Comment obtenez-vous si bon en regex ou autre? Les ressources que je trouve sont très minimalistes
@Ciney Oui, la plupart de la documentation regex est très basique. Je suppose que vous devez le pratiquer pour devenir compétent.
Voici une version moins efficace car je suis nul avec les regex. Divisez les identifiants en «E». Ensuite, si l'un des ID numériques a une longueur inférieure à 3, ajoutez un zéro. Puis rassemblez-les.
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))
Nous pouvons obtenir les patientsIDs
qui ont moins de 4 caractères, casser la chaîne en fonction de leur position et les coller ensemble.
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"