modification d'une valeur sous condition
Bonjour,
je galère pour modifier sous condition une valeur d'une cellule d'un dataframe.
J'ai importé un très gros fichier TXT avec des adresses postales mais malheureusement les départements 01à 09 sont numérotés de 1 à 9 dans le fichier source.
Je souhaiterai remettre au bon format. pour ce faire après l'import, je créé 4 colonnes (NCODEPOS et NDEPET qui reprennent les valeur de la colonne CODPOS et DEPET mais en format char et 2 colonnes qui me calculent la longueur de la chaine de chaque colonne).
Code :
Code:
1 2 3 4 5
| basecli <- mutate(basecli,
NCODEPOS= as.character(CODPOS),
NDEPET = as.character(DEPET),
NBCARCODEPOS = str_length(CODPOS),
NBCARDEPET = str_length(DEPET)) |
A partir de là je veux modifier la valeur de la colonne NCODEPOS en ajoutant un 0 à la valeur lorsque la valeur de NBCARCODEPOS = 4 (exemple si NCODEPOS = 4560 , je veux la modifier à 04560).
J'ai testé avec un if mais ça ne fonctionne pas, voici mon code :
Code:
1 2 3 4 5 6
| library(readr)
library(dplyr)
library(dtplyr)
library(stringr)
basecli<- mutate(basecli, CODEPOS = ifelse((str_length(NBCARCODEPOS)==4 , str_c ("0", NBCARCODEPOS), NCODEPOS)) |
Je n'ai pas de message d'erreur ni d'insulte mais je n'ai pas ma nouvelle colonne...
Pouvez-vous m'aider ? Comment je peux faire ? Ou si vous avez une autre solution.... merci.
PS : j'adapterais le code pour le département.
Modification d'une valeur sous condition
Bonjour,
Par exemple :
Code:
1 2 3 4 5 6
| > test <- data.frame(codepos=c("1111","22222"))
> test$codepos <- as.character(test$codepos)
> test
codepos
1 1111
2 22222 |
Code:
1 2 3 4 5 6
| > library(stringr)
> test$codepos[str_length(test$codepos)==4] <- str_c("0",test$codepos[str_length(test$codepos)==4])
> test
codepos
1 01111
2 22222 |
ou avec la fonction ifelse() :
Code:
1 2 3 4 5 6
| > library(stringr)
> test$codepos <- ifelse(str_length(test$codepos)==4,str_c("0",test$codepos),test$codepos)
> test
codepos
1 01111
2 22222 |
NB : Il faut vérifier que la variable est bien de type caractères.
Cordialement,