0
votes

Comment extraire uniquement les noms des joueurs en r

J'ai un objet appelé kemba_walker , qui contient ces caractères:

"Kemba Walker PG | # 8"

Comment puis-je extraire Kemba Walker PG en utilisant stringr ?

Je pense que je peux utiliser kemba_walker%>% str_extract ("") mais je ne connais pas regex, donc je n'ai aucune idée du modèle à mettre dans la fonction!


9 commentaires

Pouvez-vous afficher quelques entrées supplémentaires de vos données? Quelle serait la règle pour extraire le nom du joueur? Avez-vous besoin des deux premiers mots de chaque entrée ou texte avant "|" ou autre chose?


Ronak, j'ai besoin des deux premiers mots de chaque entrée


@HowardBaek OK, mais est-ce que chaque entrée n'a que deux mots de nom? Et quelqu'un avec un deuxième prénom? Souhaitez-vous alors uniquement capturer le prénom et le deuxième prénom?


Ok les gars, pour garder les choses simples, je veux TOUS les caractères qui précèdent | . Donc, je voudrais Kemba Walker PG


De cette façon, je peux capturer les joueurs avec un deuxième prénom, comme l'a mentionné @TimBiegeleisen


Je viens de modifier ma question @akrun


@akrun Mais, ce n'est pas parce que l'OP a demandé la bibliothèque stringr que son utilisation est la meilleure réponse ici.


@TimBiegeleisen Je suis d'accord, mais l'OP a mentionné à deux endroits l'utilisation de stringr


Il s'agit d'un texte délimité par un tube, donc importez comme tel: read.table (text = "Kemba Walker PG | # 8", sep = "|", strip.white = TRUE)


3 Réponses :


2
votes

Vous pouvez utiliser le tube comme marqueur pour savoir comment trouver le nom du joueur:

input <- "  Kemba Walker PG  |  #8"
name <- sub("^\\s*(.*?)\\s*\\|.*$", "\\1", input)
name

[1] "Kemba Walker PG"

Le regex fonctionne en capturant le nom du joueur dans (. *?) code >. Le remplacement, qui est le deuxième argument du sub , est \ 1 , qui est le groupe de capture.


3 commentaires

Que signifie "\\ 1" ?


@akrun Il ne m'est jamais toujours clair si quelque chose est un duplicata exact . Il y a beaucoup plus de doublons de ce que je peux voir sur d'autres balises, telles que regex et SQL.


J'ai également hésité d'abord parce que l'OP a mentionné une solution stringr, mais ensuite je trouve le modèle exact avec sub . Mais, fermer une question avec dupe augmente les chances de la trouver via Google



2
votes

Nous pouvons utiliser str_remove de stringr pour supprimer le caractère | suivi des autres caractères . *

str1 <- "  Kemba Walker PG  |  #8"

Ou en utilisant str_extract pour extraire des caractères autres que | à partir du début ( ^ ) du string

trimws(str1,  whitespace = "\\s*[|].*|\\s*", which = 'both')
#[1] "Kemba Walker PG"

Ou en base R avec seulement trimws

trimws(str_extract(str1, "^[^|]+")
#[1] "Kemba Walker PG"


0 commentaires

2
votes

Nous pouvons utiliser sub pour tout supprimer après "|"

read.table(text = vec, sep = "|", strip.white = TRUE)

Comme @ zx8754 le mentionne, nous pouvons également utiliser read.table

vec <- "  Kemba Walker PG  |  #8"

trimws(sub("\\|.*", "", vec))
#[1] "Kemba Walker PG"


0 commentaires