J'ai un ensemble de données avec une colonne de nom qui contient le nom et le prénom. Je dois les échanger pour avoir le prénom et le nom de famille. Voici mon ensemble de données:
| Id | Name | Street | State | |----|---------------|------------|-------| | 10 | MAYANK NAGAR | Newark Ave | NJ | | 50 | MARK PETER | Grant Ave | TX |
J'ai essayé le code ci-dessous pour fonctionner:
sub("(\\w+),\\s(\\w+)","\\2\\1", dummy$Name)
Cependant, cela me donne le nom tel qu'il est, c'est-à-dire "NAGAR MAYANK" et "PETER MARK".
J'ai besoin de la sortie comme ci-dessous:
df=data.frame(Id=c("10","50"), Name=c("NAGAR MAYANK","PETER MARK"), Street= c("Newark Ave","Grant Ave"),Country=c("NJ","TX"))
3 Réponses :
Pour cela, vous pouvez utiliser word ()
de la bibliothèque stringr
:
df$Name <- with(df, paste(word(Name, 2), word(Name, 1))) Id Name Street Country 1 10 MAYANK NAGAR Newark Ave NJ 2 50 MARK PETER Grant Ave TX
Votre expression régulière est presque correcte, elle inclut juste une virgule qui n'est pas présente dans les chaînes donc le modèle n'est pas détecté et aucune correspondance / remplacement n'est effectué. (Comme indiqué par @Mosquite)
df$Name <- sub('(\\w) (\\w)', '\\2 \\1', df$Name) df # Id Name Street Country # 1 10 MAYANK NAGAR Newark Ave NJ # 2 50 MARK PETER Grant Ave TX
Pouvez-vous vérifier le regex? Pour moi, sub ('(\\ w +) (\\ w +)', '\\ 2 \\ 1', df $ Name)
a fonctionné.
Une autre solution pourrait être cSplit
:
library(splitstackshape) df.tmp <- cSplit(df, "Name", " ") df$Name <- paste(df.tmp$Name_2, df.tmp$Name_1, sep =" ") > df Id Name Street Country 1 10 MAYANK NAGAR Newark Ave NJ 2 50 MARK PETER Grant Ave TX
Vous avez un
,
dans votre expression régulière après le premier mot, ce qui provoque l'échec de la recherche.