2016-01-20 1 views
0

Je m'excuse d'avance, cela pourrait être une question répétée. Cependant, je viens de passer les deux dernières heures sur stackoverflow, et n'arrive pas à trouver une solution.R: grepl sélectionnez le premier caractère sur une chaîne

Je veux utiliser grepl pour détecter les lignes qui commencent par un chiffre, c'est ce que j'ai essayé d'utiliser, mais il ne m'a pas donné la réponse rigt:

grep.numeric=as.data.frame(grepl("^[:digit:]",df_mod$name)) 

Je suppose que le problème est de la expression régulière "^[:digit:]", mais je ne pouvais pas comprendre.

MISE À JOUR

Mon dataframe ressemble à ceci, il est énorme, mais au-dessous est un exemple:

ID  mark   name 
    1  whatever  name product 
    2  whatever  10 product 
    3  whatever  250 product 
    4  another_mark other product 

Je veux détecter les produits que leurs noms commencent par un numéro.

MISE A JOUR 2

application grep.numeric=grepl("^[[:digit:]]",df_mod$name) sur l'exemple ci-dessous me donner la bonne réponse qui est:

grep.numeric 
    [1] FALSE TRUE TRUE FALSE 

Mais, ce qui me rendre fou est quand je pply ce auj à mon vrai dataframe:

grep.numeric=grepl("^[[:digit:]]",df_mod[217,]$nom) 

me donne ce résultat:

grep.numeric 
    [1] FALSE 

Mais en fait, ce que j'ai est ceci:

df_mod[217,]$nom 
    [1] 100 lipo 30 gélules 

S'il vous plaît aidez-moi.

+1

Essayez '^ [[: digit:]] '- il doit être à l'intérieur d'une classe de caractères –

+0

J'ai utilisé une question liée à Perl comme doublon source, mais elle est également liée à la classe de caractères POSIX, et devrait donc être pertinente ici aussi. –

+0

@Wiktor Stribiżew J'ai changé '"^[: digit:] "' par '"^[[: digit:]] "' mais rien n'a changé. – sarah

Répondre

1

Apparemment, certaines de vos valeurs ont conduit des espaces, vous pouvez donc soit modifier votre regex (ou quelque chose de similaire)

grepl("^\\s*[[:digit:]]", df_mod$name) 

Ou utilisez le construit en trimws fonction

grepl("^[[:digit:]]", trimws(df_mod$name)) 
+0

Oui, les espaces principaux dans les valeurs ont causé le problème. 'grepl ("^[[: digit:]] ", trimws (df_mod $ name))' a fonctionné comme un charme, merci. – sarah

+0

Avez-vous également essayé 'grepl ("^\\ s * [[: digit:]] ", df_mod $ name)'? Je l'aime mieux. –

+0

Oui, ça marche aussi !! J'ai deux solutions pour mon problème maintenant :) – sarah