[R] min() return factor class values
Peter Dalgaard
P.Dalgaard at biostat.ku.dk
Tue Jan 9 17:03:02 CET 2007
Milton Cezar Ribeiro wrote:
> Dear Peter,
>
> I tryed something like
>
> >head(especies.aicc)
> especie aicc
> 1 Attila.rufus 17.15934
> 2 Attila.rufus 11.41371
> 3 Attila.rufus 11.41371
> 4 Attila.rufus 19.55998
> 5 Attila.rufus 17.23780
> 6 Attila.rufus 19.22545
>
> > especies.min<-aggregate.data.frame(especies.aicc,list
> (Especie=especies.aicc$especie),max)
>
Make sure to aggregate only the part of your data frame that is numeric:
> x <- read.table(stdin())
0: especie aicc
1: 1 Attila.rufus 17.15934
2: 2 Attila.rufus 11.41371
3: 3 Attila.rufus 11.41371
4: 4 Attila.rufus 19.55998
5: 5 Attila.rufus 17.23780
6: 6 Attila.rufus 19.22545
7:
> aggregate(x[2], list(x$especie), min)
Group.1 aicc
1 Attila.rufus 11.41371
> aggregate(x[2], list(x$especie), max)
Group.1 aicc
1 Attila.rufus 19.55998
> aggregate(x, list(x$especie), max) # this breaks
Error in Summary.factor(..., na.rm = na.rm) :
max not meaningful for factors
>
> But it works fine only for "mean" FUN and not for "min" and "max". Also also, when I use "mean" I got the following warnings:
>
> > especies.min<-aggregate.data.frame(especies.aicc,list
> (Especie=especies.aicc$especie),mean)
>
> Warning messages:
> 1: argument is not numeric or logical: returning NA in: mean.default(X[[1]], ...)
> 2: argument is not numeric or logical: returning NA in: mean.default(X[[2]], ...)
>
> In fact I need only min() and max().
>
> Miltinho
> -----------------
>
> Peter Dalgaard <P.Dalgaard at biostat.ku.dk> escreveu:
> Milton Cezar Ribeiro wrote:
>
>> Hi R-friends
>>
>> I don´t know why the "min()" function below return the min value as factor. When i force the aicc.min using a as.numeric() function, it return a factor index (1,2,..) and not min value as I want. By the way, I included a sessionInfo() at the end of this e-mail.
>>
>>
> min() is not doing anything out of the ordinary, but cbind'ing it with
> the character vector sp coerces it to character and rbind'ing to a data
> frame turns character vectors into factors...
>
> The whole thing looks like it could be a straightforward application of
> aggregate().
>
>> In fact I had the same problem (values as factor) on other part of my script and I noticed that it occour when I use "cbind()". It is real?
>>
>> Any idea?
>>
>> Kind regards,
>>
>> Miltinho
>>
>>
>>> especies.aicc.min<-data.frame()
>>>
>>> for (sp in levels(especies.aicc$especie))
>>>
>>>
>> + {
>> + sele<-subset(especies.aicc,especie==sp)
>> + especies.aicc.min<-rbind(especies.aicc.min,cbind(sp,aicc.min=min(sele$aicc)))
>> + }
>>
>>
>>> especies.aicc.min
>>>
>>>
>> sp aicc.min
>> 1 Attila.rufus 6.7387056413613
>> 2 Automolus.leucophthalmus 125.791300522824
>>
>>
>>> class(especies.aicc.min$aicc.min)
>>>
>>>
>> [1] "factor"
>>
>> -----------
>>
>>> sessionInfo()
>>>
>> R version 2.4.0 (2006-10-03)
>> i386-pc-mingw32
>> locale:
>> LC_COLLATE=English_Jamaica.1252;LC_CTYPE=English_Jamaica.1252;LC_MONETARY=English_Jamaica.1252;LC_NUMERIC=C;LC_TIME=English_Jamaica.1252
>> attached base packages:
>> [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" "base"
>>
>>
>>
>>
>
>
>
--
O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
More information about the R-help
mailing list