[R] nested if/else very slow, more efficient ways?
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Oct 24 00:22:56 CEST 2006
On 10/23/2006 6:03 PM, Kim Milferstedt wrote:
> Hello,
>
> in the data.frame "resultsfuzzy" I would like to replace the
> characters in the second column ("5a", "5b", ... "5e") with numbers
> from 1 to 5. The data.frame has 39150 entries. I seems to work on
> samples that are << nrow(resultsfuzzy) but it takes suspicously long.
>
> Do you have any suggestions how to make the character replacing more efficient?
I don't know if nested if/else is inefficient, but indexing of
data.frames certainly is. You would do a lot better with ifelse() on the
whole column.
For example, if column 2 is named B, this would be much faster:
resultsfuzzy$B <- ifelse(resultsfuzzy$B == "5a", 1,
ifelse(resultsfuzzy$B == "5b", 2, ... ))
(where you'll have to fill in the ... yourself in the obvious way.
But an even faster way for your particular problem would be
resultsfuzzy$B <- match(resultsfuzzy$B, c("5a", "5b", "5c", "5d", "5e"))
Duncan Murdoch
>
> Code:
>
> for (i in 1:nrow(resultsfuzzy))
> {
> if (resultsfuzzy[i,2] == "5a"){resultsfuzzy[i,2] <- 1} else
> if (resultsfuzzy[i,2] == "5b"){resultsfuzzy[i,2] <- 2} else
> if (resultsfuzzy[i,2] == "5c"){resultsfuzzy[i,2] <- 3} else
> if (resultsfuzzy[i,2] == "5d"){resultsfuzzy[i,2] <- 4} else
> resultsfuzzy[i,2] <- 5
> }
>
> Thanks,
>
> Kim
>
> version
>
> platform i386-pc-mingw32
> arch i386
> os mingw32
> system i386, mingw32
> status
> major 2
> minor 2.1
> year 2005
> month 12
> day 20
> svn rev 36812
> language R
>
> __________________________________________
>
> Kim Milferstedt
> University of Illinois at Urbana-Champaign
> Department of Civil and Environmental Engineering
> 4125 Newmark Civil Engineering Laboratory
> 205 North Mathews Avenue MC-250
> Urbana, IL 61801
> USA
> phone: (001) 217 333-9663
> fax: (001) 217 333-6968
> email: milferst at uiuc.edu
> http://cee.uiuc.edu/research/morgenroth
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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