2 votes

R - Comment comparer deux phrases de mots si l'ordre n'est pas le même ?

Prenons un exemple

z <- "Dikesh Faldu"
y <- "Faldu Dikesh"

Je veux obtenir le traitement de ces deux variables et me donner le même résultat que "DikeshFaldu".

Prenons un autre exemple

J'ai une variable qui contient toutes les valeurs suivantes

[1] dikesh faldu
[2] xyz abc
[3] faldu dikesh
[4] anything like
[5] but only
[6] two words
[7] only but

.........

alors je veux une sortie comme

[1] dikeshfaldu
[2] xyzabc
[3] dikeshfaldu
[4] anythinglike
[5] butonly
[6] twowords
[7] butonly

ou

[1] faldudikesh
[2] xyzabc
[3] faldudikesh
[4] anythinglike
[5] onlybut
[6] twowords
[7] onlybut

3voto

Ronak Shah Points 24715

Conformément aux commentaires de @zx8754 , @Dirty Sock Sniffer et @RHertel, vous pouvez essayer,

sapply(strsplit(charvec, " "), function(x) paste(sort(x), collapse=""))

#[1] "dikeshfaldu"  "abcxyz"       "dikeshfaldu"  "anythinglike" "butonly"     
#[6] "twowords"     "butonly" 

donde

charvec <- c("dikesh faldu", "xyz abc", "faldu dikesh", "anything like", 
              "but only", "two words", "only but")

2voto

akrun Points 148302

Dans le premier cas, faites correspondre un ou plusieurs espaces ( \\s+ ) et le remplacer par "" sur sub

sub("\\s+", "", z)
#[1] "DikeshFaldu"

et pour le second cas, capturer l'espace non-blanc en tant que groupe et réarranger la référence arrière.

sub("(\\S+)\\s+(\\S+)", "\\2\\1", y)
#[1] "DikeshFaldu"

Si le sort est basé sur l'ordre alphabétique, nous utilisons alors stri_extract de stringi pour extraire les mots, sort et paste ensemble

library(stringi)
vapply(stri_extract_all(c(z,y), regex = "\\w+"), function(x)
            paste(sort(x), collapse=""), character(1))
#[1] "DikeshFaldu" "DikeshFaldu"

En utilisant le vecteur mis à jour dans le post de l'OP

vapply(stri_extract_all(charvec, regex = "\\w+"), 
       function(x) paste(sort(x), collapse=""), character(1))
#[1] "dikeshfaldu"  "abcxyz"       "dikeshfaldu"  "anythinglike" 
#[5] "butonly"      "twowords"     "butonly" 

données

charvec <- c("dikesh faldu", "xyz abc", "faldu dikesh", "anything like", 
           "but only", "two words", "only but")

1voto

amrrs Points 3824

Voici le code R que vous cherchez. Le même que celui zx8754 mentionnés.

z <- "Dikesh Faldu"
y <- "Faldu Dikesh"

sort(unlist(strsplit(z,split=' '))) == sort(unlist(strsplit(y,split=' ')))

[1] TRUE TRUE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X