2017-05-02 2 views
-1

J'ai un dataframe avec une colonne de noms de sociétés. Je veux créer une nouvelle colonne qui est une version floue/canonisés du nom (en utilisant peut-être regex à bande suffixes comme « société « inc » et « llc » et préfixes comme « le »).Comment utiliser regex dans R pour créer une nouvelle colonne de noms de société canonialisée?

name <- c("Microsoft", "Apple, Inc.", "Youtube, LLC", "Huffington Post") 
companies <- data.frame(name) 

Je veux compagnie canonicalized_name $ pour revenir

"microsoft", "apple", "youtube", "huffington post" 

Comment puis-je écrire ce modèle regex en R?

+0

Il serait beaucoup plus intuitif d'avoir l'intersection en premier, puis d'utiliser 'agrep' pour trouver la correspondance la plus proche avec les noms dans list_1 et list_2. par exemple. 'lookup <- c (" microsoft "," apple "," youtube "," huffington post "); lapply (recherche, agrep, c (liste_1, liste_2), valeur = T) ' –

+0

a. Ce sont des vecteurs, pas des listes; b. Qu'avez-vous essayé jusqu'à présent?; c. 'adist' est un point de départ. – alistaire

Répondre

0

Je ne sais pas quelles règles appliquer pour normaliser vos données, mais si vous voulez juste (un) supprimez tout après une virgule, puis convertissez la chaîne en minuscule (comme vous le faites dans votre exemple e), vous pouvez, par exemple, Pour ce faire, utilisez

library(dplyr) 
library(stringr) 
name <- c("Microsoft", "Apple, Inc.", "Youtube, LLC", "Huffington Post") 
companies <- data.frame(name) %>% 
     dplyr::mutate(canonicalized_name = stringr::str_replace(name, ",.*", "") %>% tolower) 

companies 
#    name canonicalized_name 
# 1  Microsoft   microsoft 
# 2  Apple, Inc.    apple 
# 3 Youtube, LLC   youtube 
# 4 Huffington Post huffington post