[R] test if elements of a character vector contain letters

Liviu Andronic landronimirc at gmail.com
Mon Aug 6 21:29:28 CEST 2012


On Mon, Aug 6, 2012 at 6:42 PM, Bert Gunter <gunter.berton at gene.com> wrote:
> nzchar(x) & !is.na(x)
>
> No?
>

It doesn't work for what I need:
> x
 [1] "a10" "b8"  "c9"  "d2"  "e3"  "f4"  "g1"  "h7"  "i6"  "j5"  "k"
"l"   "m"   "n"
[15] "o"   "p"   "q"   "r"   "s"   "t"   "u"   "v"   "w"   "x"   "y"
"z"   "1"   "2"
[29] "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"
"14"  "15"  "16"
[43] "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"
> nzchar(x) & !is.na(x)
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE
[18] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE
[35] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE
[52] TRUE


I need to have TRUE when an element contains a letter, and FALSE when
an element contains only numbers. The above returns TRUE for the
entire vector.

Regards
Liviu


> On Mon, Aug 6, 2012 at 9:25 AM, Liviu Andronic <landronimirc at gmail.com> wrote:
>> Dear all
>> I'm pretty sure that I'm approaching the problem in a wrong way.
>> Suppose the following character vector:
>>> (x[1:10] <- paste(x[1:10], sample(1:10, 10), sep=''))
>>  [1] "a10" "b7"  "c2"  "d3"  "e6"  "f1"  "g5"  "h8"  "i9"  "j4"
>>> x
>>  [1] "a10" "b7"  "c2"  "d3"  "e6"  "f1"  "g5"  "h8"  "i9"  "j4"  "k"
>> "l"   "m"   "n"
>> [15] "o"   "p"   "q"   "r"   "s"   "t"   "u"   "v"   "w"   "x"   "y"
>> "z"   "1"   "2"
>> [29] "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"
>> "14"  "15"  "16"
>> [43] "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"
>>
>>
>> How do you test whether the elements of the vector contain at least
>> one letter (or at least one digit) and obtain a logical vector of the
>> same dimension? I came up with the following awkward function:
>> is_letter <- function(x, pattern=c(letters, LETTERS)){
>>     sapply(x, function(y){
>>         any(sapply(pattern, function(z) grepl(z, y, fixed=T)))
>>     })
>> }
>>
>>> is_letter(x)
>>   a10    b7    c2    d3    e6    f1    g5    h8    i9    j4     k
>> l     m     n     o
>>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
>> TRUE  TRUE  TRUE  TRUE
>>     p     q     r     s     t     u     v     w     x     y     z
>> 1     2     3     4
>>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
>> FALSE FALSE FALSE FALSE
>>     5     6     7     8     9    10    11    12    13    14    15
>> 16    17    18    19
>> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>> FALSE FALSE FALSE FALSE
>>    20    21    22    23    24    25    26
>> FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>>> is_letter(x, 0:9)  ##function slightly misnamed
>>   a10    b7    c2    d3    e6    f1    g5    h8    i9    j4     k
>> l     m     n     o
>>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
>> FALSE FALSE FALSE FALSE
>>     p     q     r     s     t     u     v     w     x     y     z
>> 1     2     3     4
>> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>> TRUE  TRUE  TRUE  TRUE
>>     5     6     7     8     9    10    11    12    13    14    15
>> 16    17    18    19
>>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
>> TRUE  TRUE  TRUE  TRUE
>>    20    21    22    23    24    25    26
>>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
>>
>>
>> Is there a nicer way to do this? Regards
>> Liviu
>>
>>
>> --
>> Do you know how to read?
>> http://www.alienetworks.com/srtest.cfm
>> http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
>> Do you know how to write?
>> http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
> --
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



-- 
Do you know how to read?
http://www.alienetworks.com/srtest.cfm
http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
Do you know how to write?
http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail



More information about the R-help mailing list