[R] ifelse() question

F Z
Thu, 28 Oct 2004 23:48:54 -0000

Hi

I have a data.frame with dim = 18638 (rows)     6 (cols)

names(dat)
[1] "id"      "long"    "lat"
"species" "type"    "size"

Variable "species" and "type" are factors.  Species has 5
levels "BOV" "CAP"
"CER" "OVI" "POR"
Variable "type" has 11 levels "BRD" "CL" ...
"OTHER"

I would like to replace the values on species by the values on types only if
species is == "POR"
I tried:

x<-ifelse(dat$species %in% "POR",dat$type,dat$species)
dat[,4]<-x
but levels(x)
[1] "1"  "2"  "3"  "4"  "5"
"6"  "8"  "9"  "10" "11"
"12"

So x changes the factor names by numbers.  I can not use factor() to recover
the names since the resulting factors in x are a mixture of factors from
species and type.

I also tried

x<-gsub(pattern = "POR",replacement= factor(dat$type),dat$species)
with
same behavior.

Apparently I did not have my granola bar today so I can't find a solution!
Any help is greatly appreciated

Thanks!

Francisco