La correspondance de motif à l'aide d'un générique
Comment puis-je identifier une chaîne de caractères à l'aide d'un générique?
J'ai trouvé glob2rx
, mais je n'arrive pas à comprendre comment l'utiliser. J'ai essayé d'utiliser le code suivant pour choisir les lignes de la trame de données qui commencent par le mot blue
:
# make data frame
a <- data.frame( x = c('red','blue1','blue2', 'red2'))
# 1
result <- subset(a, x == glob2rx("blue*") )
# 2
test = ls(pattern = glob2rx("blue*"))
result2 <- subset(a, x == test )
# 3
result3 <- subset(a, x == pattern("blue*") )
Cependant, aucune de ces travaillées. Je ne suis pas sûr si je devrais l'être à l'aide d'une fonction différente de l'essayer et de le faire.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez examiner les éléments à l'intérieur d'un dataframe vous ne devriez pas utiliser
ls()
qui ne regarde que les noms des objets dans l'espace de travail courant (ou si utilisé à l'intérieur d'une fonction dans le contexte actuel). Rownames ou des éléments à l'intérieur de ces objets ne sont pas visibles àls()
(sauf bien sûr si vous ajoutez un environnement argument de lals(.)
-call). Essayez d'utilisergrep()
qui est le cheval de bataille de la fonction de filtrage de caractère vecteurs:Si vous souhaitez utiliser les sous-ensemble de considérer alors étroitement liées à la fonction
grepl()
qui retourne un vecteur de partitions logiques contenues peuvent être utilisés dans le sous-ensemble argument:Edit: Ajout d'une "bonne" utilisation de glob2rx au sein de sous-ensemble():
Je ne pense pas que j'ai réellement compris
glob2rx
jusqu'à ce que je revins à cette question. (Je l'ai fait comprendre la portée des questions qui ont été ar la racine de l'interlocuteur, de ses difficultés. Personne la lecture de ce devrait maintenant, faites défiler vers Gavin réponse et upvote il.)!
avantgrepl
a <- data.frame( x = c('red','blue1','blue2', 'red2','lightblue','darkblue'))
je serai très reconnaissant de votre aide."^blue"
. Voir?regex
glob2rx()
convertit un modèle, y compris un caractère générique dans l'équivalent de l'expression régulière. Vous devez ensuite transmettre cette expression régulière sur l'une des R de filtrage des outils.Si vous souhaitez faire correspondre
"blue*"
où*
a l'habitude d'générique, pas expression régulière, cela signifie que nous utilisonsglob2rx()
pour convertir le modèle générique à l'intérieur d'un expression régulière:L'objet retourné est une expression régulière.
Compte tenu de vos données:
nous pouvons en correspondance du modèle à l'aide de
grep()
ou des outils similaires:Comme pour la sélection de lignes problème que vous avez posté
ou via
subset()
:De l'espoir, qui explique ce que
grob2rx()
et comment l'utiliser?Vous êtes sur la bonne voie - le mot-clé que vous devriez être googler est d'Expressions Régulières. R ne les soutenir d'une façon plus directe que cette aide
grep()
et un peu d'autres alternatives.Voici une discussion détaillée: http://www.regular-expressions.info/rlanguage.html
Si vraiment vous ne souhaitez utiliser des caractères génériques pour identifier des variables spécifiques, vous pouvez utiliser une combinaison de
ls()
etgrep()
comme suit:Vous pouvez également utiliser les données du paquet.table et c'est Comme la fonction, les détails donnés ci-dessous
Comment choisir R des données.les lignes de la table basée sur la correspondance de sous-chaîne (à la SQL like)