[R] Problem with na.omit when using length()

Viju Moses vijumoses at gmail.com
Tue Oct 6 07:56:27 CEST 2009


Thanks for that. It works as expected now. A case of GIGO (garbage in- 
garbage out) on my part, with some head-banging. :-)

Regards
Viju Moses

Yihui Xie wrote:
> just put na.omit() inside length() if you intend to omit the NA
> elements of the vector (otherwise you are trying to omit the NA's of
> the returned value of length() which is a scalar 2):
> 
> length(na.omit(sno[a==1 & b==0]))
> 
> Regards,
> Yihui
> --
> Yihui Xie <xieyihui at gmail.com>
> Phone: 515-294-6609 Web: http://yihui.name
> Department of Statistics, Iowa State University
> 3211 Snedecor Hall, Ames, IA
> 
> 
> 
> On Mon, Oct 5, 2009 at 11:51 PM, Viju Moses <vijumoses at gmail.com> wrote:
>> I'm seeing what looks to me like odd behaviour when I use na.omit on a
>> simple "length" function, as follows.
>>
>>> sno
>>  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>> 25 26 27 28 29 30 31 32 33 34
>>> a
>>  [1] 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
>>> b
>>  [1]  1  1  0  1  1  1  0  0 NA  0  0  0 NA  0  1 NA  0  1  0  0  0  0 NA  0
>>  0  0  0 NA  0 NA  0  1  0  0
>>
>> #NA refers to no data available.
>>
>>> df=data.frame(sno,a,b)
>> # I'm pasting the sorted data frame below:
>>> sortdf=df[order(a,b),]
>>> sortdf
>>   sno a  b
>> 3    3 0  0
>> 7    7 0  0
>> 8    8 0  0
>> 10  10 0  0
>> 11  11 0  0
>> 12  12 0  0
>> 14  14 0  0
>> 17  17 0  0
>> 20  20 0  0
>> 21  21 0  0
>> 22  22 0  0
>> 24  24 0  0
>> 25  25 0  0
>> 26  26 0  0
>> 27  27 0  0
>> 29  29 0  0
>> 31  31 0  0
>> 33  33 0  0
>> 34  34 0  0
>> 1    1 0  1
>> 4    4 0  1
>> 9    9 0 NA
>> 13  13 0 NA
>> 23  23 0 NA
>> 28  28 0 NA
>> 30  30 0 NA
>> 19  19 1  0
>> 2    2 1  1
>> 5    5 1  1
>> 6    6 1  1
>> 15  15 1  1
>> 18  18 1  1
>> 32  32 1  1
>> 16  16 1 NA
>>
>> #Now I wish to count howmany records have a=1 AND b=0. From the lower
>> section of that sorted dataframe we see the answer is 1 (record # 19). But
>> instead I'm seeing 2. Probably counting record # 16 also.
>>
>>> na.omit(length(sno[a==1 & b==0]))
>> [1] 2
>>
>> I'd be grateful to anyone who can point out what I'm doing wrong.
>>
>> Regards.
>>
>> ______________________________________________
>> 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.
>>




More information about the R-help mailing list