0
votes

R: Comment muter de nouveaux identifiants en modifiant l'ID précédent?

J'ai posé la question ( Comment muter un Nouvelle colonne en modifiant une autre colonne? )

Maintenant, j'ai un autre problème. Je dois utiliser plus de 'déstelié'ids comme, p> xxx pré>

à partir de cet identifiant, je souhaite affecter de nouveaux identifiants "Tidy" comme, P>

df2 <- data.frame(id=c("A0001","A0010","A0100","B0001","B0010","B0100"),n=c(1,2,3,4,5,6))


0 commentaires

3 Réponses :


1
votes

La fonction str_pad code> est pratique à cette fin, comme vous l'avez dit. Mais vous devez d'abord extraire les chiffres, puis la coller ensemble.

library(stringr)

paste0(toupper(str_extract(df1$id, "[aA-zZ]-")), 
      str_pad(str_extract(df1$id, "\\d+"), width=4, pad="0"))

[1] "A-0001" "A-0010" "A-0100" "B-0001" "B-0010" "B-0100"


0 commentaires

1
votes

Nous pouvons séparer les données en différentes colonnes basées sur "-" code>, convertir les lettres en majuscules, en utilisant sprintf code> tampon avec 0 et combinez les deux colonnes avec Unite code>.

df1 %>%
  extract(id, c("id1", "id2"), regex = "([:alpha:])-?(\\d+)") %>%
  mutate(id1 = case_when(id1 == 'c' ~ 'B', 
                         TRUE ~ id1), 
         id1 = toupper(id1),id2 = sprintf('%04s', id2)) %>%
  unite(id, id1, id2, sep = "")


2 commentaires

Merci ronak. Ça marche pour moi. Juste au cas où si je veux convertir "C1" en "B0001", comment puis-je faire cela? (Maintenant, je n'ai pas "-" et je veux changer de caractère)


@Tanttan a mis à jour la réponse sur la façon de faire cela.



1
votes

Solution de base R forte> xxx pré>

solution de tirette forte> p> xxx pré>

Sortie forte> p> xxx pré>

DATA strong> p>

df1 <- data.frame(id=c("A-1","A-10","A-100","b-1","b-10","b-100"),n=c(1,2,3,4,5,6))


0 commentaires