/ / R grepl nájsť čisté číslo - regex, r

R grepl nájsť čisté číslo - regex, r

Pravdepodobne veľmi základná otázka, ale jej znepokojujúce je, že nemôžem "ľahko nájsť riešenie ... takže som si myslel, že by som mal prísť k múdrosti tých múdrych ..."

Chcel by som byť schopný vrátiť TRUE alebo FALSE podľa toho, či je reťazec znakov čisto číslo a nie iba čísla ... Najbližšie, čo som dostal, bolo

grepl("[0-9]","99393")
grepl("[0-9]","blah")

Toto však nefunguje, pretože nasledujúci text sa vráti ako PRAVDA, keď by mal byť FALSE

grepl("[0-9]","993T3")

Ako vždy, každá pomoc by bola ocenená!

UPRAVIŤ

Ako poznamenal joran, je dôležité si uvedomiť, že reťazec znakov bude vždy obsahovať iba celé čísla a písmená, t. J. Nebude obsahovať desatinné miesta alebo čiarky pre číslo ...

odpovede:

5 pre odpoveď č. 1

Prečo jednoducho nepoužívate robustné interné metódy na donútenie k celému číslu alebo číslu?

Vráti sa NA ak to nie je možné is.na ak chcete logický výsledok:

is.na( as.integer( "993T3" ) )
# [1] TRUE

is.na( as.integer( "99393" ) )
# [1] FALSE

Nezabudnite, že ak máte čo do činenia s číslami s pohyblivou rádovou čiarkou, použite as.numeric v opačnom prípade skrátite časť svojho čísla s pohyblivou rádovou čiarkou pomocou as.integer


4 pre odpoveď č. 2

Mali by ste zadať celý regulárny výraz a určiť začiatok (^) a koniec reťazca ($). Napríklad:

> grepl("^[[:digit:]]+$","993T3")
[1] FALSE

Pozri na http://en.wikibooks.org/wiki/R_Programming/Text_Processing#Regular_Expressions ak sa chcete dozvedieť viac o regexp.


0 pre odpoveď č. 3

Čo takto !grepl("[^0-9]","993T3")?

Edit: Toto sa vráti TRUE pre prázdny reťazec. Aby ste tomu zabránili, použite

!grepl("[^0-9]", x) & nzchar(x)

pre vektor x typu znaku.