En R, j'ai une liste de sociétés telles que:
companies <- data.frame(Name=c("Company A Inc (COMPA)","Company B (BEELINE)", "Company C Inc. (Coco)", "Company D Inc.", "Company E"))
Je veux supprimer le texte entre parenthèses, pour finir avec la liste suivante:
Name
1 Company A Inc
2 Company B
3 Company C Inc.
4 Company D Inc.
5 Company E
Une approche que j'ai essayée consistait à scinder la chaîne puis à utiliser ldply:
companies$Name <- as.character(companies$Name)
c<-strsplit(companies$Name, "\\(")
ldply(c)
Mais comme tous les noms de société n’ont pas de parenthèses, cela échoue:
Error in list_to_dataframe(res, attr(.data, "split_labels"), .id, id_as_factor) :
Results do not have equal lengths
Je ne suis pas marié à la solution strsplit. Tout ce qui supprime ce texte et les parenthèses serait bien.
Un gsub
devrait fonctionner ici
gsub("\\s*\\([^\\)]+\\)","",as.character(companies$Name))
# [1] "Company A Inc" "Company B" "Company C Inc."
# [4] "Company D Inc." "Company E"
Ici, nous remplaçons simplement les occurrences de "(...)" par rien (en supprimant également tout espace de début). R donne un aspect pire qu’il ne l’est avec tous les échappements que nous devons faire pour la parenthèse car ce sont des caractères spéciaux dans les expressions régulières.
Vous pouvez aussi utiliser:
library(qdap)
companies$Name <- genX(companies$Name, " (", ")")
companies
Name
1 Company A Inc
2 CompanyB
3 Company C Inc.
4 Company D Inc.
5 CompanyE
Vous pouvez utiliser stringr::str_replace
. C'est bien parce qu'il accepte les variables factorielles.
companies <- data.frame(Name=c("Company A Inc (COMPA)","Company B (BEELINE)",
"Company C Inc. (Coco)", "Company D Inc.",
"Company E"))
library(stringr)
str_replace(companies$Name, " \\(.*\\)", "")
# [1] "Company A Inc" "Company B" "Company C Inc."
# [4] "Company D Inc." "Company E"
Et si vous voulez toujours utiliser strsplit
, vous pouvez faire
companies$Name <- as.character(companies$Name)
unlist(strsplit(companies$Name, " \\(.*\\)"))
# [1] "Company A Inc" "Company B" "Company C Inc."
# [4] "Company D Inc." "Company E"
library(qdap)
bracketX(companies$Name) -> companies$Name