substring avec concaténation

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

alex hassan
Messages : 81
Enregistré le : 02 Oct 2012, 11:25

substring avec concaténation

Messagepar alex hassan » 29 Sep 2015, 16:18

Bonjour,

j'ai un data frame avec plusieurs centaines des lignes, mais pour l'exemple j'ai ce data frame df:

Code : Tout sélectionner

df = data.frame(name=c("marie", "alain", "dupont"), address=c("paris_A1", "Paris_A2_", "Paris_Arrondissement16"))
df
    name       address
    marie      paris_A1
    alain     Paris_A2_
   dupont Paris_Arrond2


je veux enlever les (_A1, _A2_, _Arrond2) de la colonnes adresse et concaténer le morceau enlevé à la colonne name selon les critères:
_A2_ , _Arrond2 ==> _A2
_A1 ==> _A1 et le résultat souhaité:

Code : Tout sélectionner

df
    name       address
    marie_A1      paris
    alain_A2       Paris
   dupont_A2     Paris

ma question est comment je peux faire ça en testant les trois conditions en même temps:

Code : Tout sélectionner

test = function(x){
    if(isTRUE(grep('_A1',x)==1) | isTRUE(grep('_A2_',x)==1) | isTRUE(grep('_Arrond2',x)==1)){
       x = gsub(?, '', x))
    }
}


j'ai essayé avec str_replace de package stringr mais j'arrive pas,

merci pour votre aide

Gabriel Terraz
Messages : 593
Enregistré le : 26 Sep 2011, 15:11

Re: substring avec concaténation

Messagepar Gabriel Terraz » 29 Sep 2015, 18:25

Salut,
Ceci devrait marcher sous réserves de cas particuliers non prévus !

Code : Tout sélectionner

gr <- regexpr("_A.+$" , df$address)
ARR <- regmatches(df$address , gr)
ARR
[1] "_A1"              "_A2_"             "_Arrondissement2"

ARR <- gsub("_$|[a-z]" , "" , ARR)
ARR
[1] "_A1" "_A2" "_A2"

df$name <- paste0(df$name , ARR)


Edit :
J'avais oublié d'enlever les arrondissement de l'adresse :

Code : Tout sélectionner

df$address <- sub("_.+$" , "", df$address)

Logez Maxime
Messages : 3141
Enregistré le : 26 Sep 2006, 11:35

Re: substring avec concaténation

Messagepar Logez Maxime » 30 Sep 2015, 08:24

Bonjour,

une autre possibilité :

Code : Tout sélectionner

auxi <- gsub("((?<=A)(\\D+)(?=\\d+.*$)|_$)", "", df$address, perl=T)
auxi <- strsplit(auxi,"_")
auxi <- do.call(rbind, auxi)

df$name <- paste(df$name, auxi[,2], sep="_")
df$address <- auxi[,1]
Cordialement,
Maxime

alex hassan
Messages : 81
Enregistré le : 02 Oct 2012, 11:25

Re: substring avec concaténation

Messagepar alex hassan » 30 Sep 2015, 10:28

Bonjour,

Merci beaucoup pour tout les deux, ça marche très bien

Alex

alex hassan
Messages : 81
Enregistré le : 02 Oct 2012, 11:25

Re: substring avec concaténation

Messagepar alex hassan » 30 Sep 2015, 14:54

Bonjour,

j'ai testé les solution sur une autre data frame et je trouve des problèmes (il y a plus de configuration à traiter):
mes A majuscule sont toujours suivis d'un chiffre de 1 à 3
le mot Aide aussi est suivie d'un chiffre de 1 à 3 ==> le mot Aide sans chiffre derrière je le traite pas et il peu se trouver partout dans l'adresse,
je trouve pas des exemples claires sur les expression régulières, pour mettre la conditionne nécessaire à traiter mes cas: un A majuscule suivie par un chiffre et un under score.

Code : Tout sélectionner

df = data.frame(name=c("jean", "lucie", "marie", "alain", "dupont", "stephane"),
      address=c("A3_Lyon" ,"paris_A1", "Paris_A2_Test", "Paris_Aide1",  "Paris_Aide2_Lyon", 'Lille_Aide_'))
> df
      name          address
1     jean          A3_Lyon
2    lucie         paris_A1
3    marie    Paris_A2_Test
4    alain      Paris_Aide1
5   dupont Paris_Aide2_Lyon
6 stephane      Lille_Aide_

la sortie souhaitée:

Code : Tout sélectionner

> df
      name             address
1     jean_A3          Lyon
2    lucie_A1          paris
3    marie_A2         ParisTest
4    alain_Aide1      Paris
5   dupont_Aide2   ParisLyon
6 stephane      Lille_Aide_   ### il reste pareille parce que il n'y a pas un chiffre derrière le mot Aide 


Merci

Logez Maxime
Messages : 3141
Enregistré le : 26 Sep 2006, 11:35

Re: substring avec concaténation

Messagepar Logez Maxime » 02 Oct 2015, 09:34

Bonjour,

Code : Tout sélectionner

df = data.frame(name=c("jean", "lucie", "marie", "alain", "dupont", "stephane"),
      address=c("A3_Lyon" ,"paris_A1", "Paris_A2_Test", "Paris_Aide1",  "Paris_Aide2_Lyon", 'Lille_Aide_'))

df[1:2] <- lapply(df, as.character)

auxi <- gsub("(^.*)(A.*\\d+)(.*$)", "\\2", df$address)
auxi2 <- gsub("(^.*)(A.*\\d+)(.*$)", "\\1\\3", df$address)

ind <- df$address!=auxi2
df$address[ind] <- gsub("_", "", auxi2[ind])
df$name[ind] <- paste(df$name[ind], auxi[ind], sep="_")
Cordialement,
Maxime

alex hassan
Messages : 81
Enregistré le : 02 Oct 2012, 11:25

Re: substring avec concaténation

Messagepar alex hassan » 06 Oct 2015, 09:49

Merci

ça marche

Alex


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité