4 votes

Suppression des caractères répétés dans les chaînes de caractères

Cette question pourrait être liée à celle-ci question .

Malheureusement, la solution proposée ne fonctionne pas avec mes données.

J'ai l'exemple de vecteur suivant :

example<-c("ChildrenChildren", "Clothing and shoesClothing and shoes","Education, health and beautyEducation, health and beauty", "Leisure activities, travelingLeisure activities, traveling","LoansLoans","Loans and financial servicesLoans and financial services" ,"Personal transfersPersonal transfers" ,"Savings and investmentsSavings and investments","TransportationTransportation","Utility servicesUtility services")

Et je veux bien sûr les mêmes cordes sans répétition, c'est-à-dire :

  > result
 [1]   "Children" "Clothing and shoes" "Education, health and beauty"

Est-ce possible ?

10voto

Cath Points 10973

Vous pouvez utiliser sub pour cela, en capturant directement le bit que l'on veut dans les pattern partie :

sub("(.+)\\1", "\\1", example)
 #[1] "Children"                      "Clothing and shoes"            "Education, health and beauty"  "Leisure activities, traveling" "Loans"                        
 #[6] "Loans and financial services"  "Personal transfers"            "Savings and investments"       "Transportation"                "Utility services"

(.+) permet de capturer un certain modèle et \\1 affiche ce que vous venez de capturer donc ce que vous essayez de trouver est "n'importe quoi deux fois" et ensuite vous remplacez avec le même "n'importe quoi" mais juste une fois.

5voto

Spacedman Points 33792

Si toutes les chaînes sont répétées, elles sont alors deux fois plus longues que nécessaire, alors prenez la première moitié de chaque chaîne :

> substr(example, 1, nchar(example)/2)
 [1] "Children"                      "Clothing and shoes"           
 [3] "Education, health and beauty"  "Leisure activities, traveling"
 [5] "Loans"                         "Loans and financial services" 
 [7] "Personal transfers"            "Savings and investments"      
 [9] "Transportation"                "Utility services"

3voto

NelsonGon Points 11338

On pourrait essayer :

stringr::str_remove_all(example,"[a-z].*[A-Z]")

Résultat :

[1] "Children"                      "Clothing and shoes"            "Education, health and beauty" 
 [4] "Leisure activities, traveling" "Loans"                         "Loans and financial services" 
 [7] "Personal transfers"            "Savings and investments"       "Transportation"               
[10] "Utility services"

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