Skip to content

Is it possible to remove this loop? [SEC=UNCLASSIFIED]

10 messages · Li Jin, Pascal Oettli, PIKAL Petr +4 more

#
Hello,

Try:

 > a1$h2 <- 0
 > a1$h2[a1$h1=="H"] <- 1

Regards

Le 12/07/03 16:18, Jin.Li at ga.gov.au a ?crit :
#
Hi
achieve
Untested

a1$h2 <- (a1$h1=="H")*1

Regards
Petr
If
by
emails
email,
-------------------------------------------------------------------------------------------------------------------------
http://www.R-project.org/posting-guide.html
#
On 07/03/2012 05:18 PM, Jin.Li at ga.gov.au wrote:
Hi Jin,
Just to provide you with an embarrassment of alternatives:

a1$h2<-ifelse(a1$h1=="H",1,0)

Jim
#
On Jul 3, 2012, at 5:08 AM, Jim Lemon wrote:

            
One more. Similar to Petr's, but perhaps a bit more accessible to a  
new R user:

a1$h2 <- as.numeric(a1$h1=="H")

I wasn't sure whether NA's would be handled in the same manner by  
these two methods so I tested:

 > ifelse( factor(c("H", "h", NA))=="H", 1, 0)
[1]  1  0 NA
 > as.numeric( factor(c("H", "h", NA))=="H")
[1]  1  0 NA
#
Thank you all for providing various alternatives. They are all pretty fast. Great help! Based on a test of a dataset with 800,000 rows, the time used varies from 0.04 to 11.56 s. The champion is:
Regards,
Jin

Geoscience Australia Disclaimer: This e-mail (and files transmitted with it) is intended only for the person or entity to which it is addressed. If you are not the intended recipient, then you have received this e-mail by mistake and any use, dissemination, forwarding, printing or copying of this e-mail and its file attachments is prohibited. The security of emails transmitted cannot be guaranteed; by forwarding or replying to this email, you acknowledge and accept these risks.
#
On 2012-07-03 17:23, Jin.Li at ga.gov.au wrote:
Interesting. My testing shows that Petr's solution is about
twice as fast. Not that it matters much - the time is pretty
small in any case.

  a0 <- data.frame(h1 = sample(c("H","J","K"), 1e7, replace = TRUE),
                   stringsAsFactors = FALSE)
  a1 <- a0
  system.time({a1$h2 <- 0; a1$h2[a1$h1 == "H"] <- 1})
  #   user  system elapsed
  #   1.47    0.48    1.96
  a11 <- a1

  a1 <- a0
  system.time(a1$h2 <- (a1$h1 == "H") * 1)
  #  user  system elapsed
  #  0.37    0.17    0.56
  a12 <- a1
  all.equal(a11,a12)
  #[1] TRUE

Peter Ehlers
#
Le 04/07/2012 12:43, Peter Ehlers a ?crit :
I got the same result. Petr's solution is the fastest. Good to know it.

Pascal Oettli
#
Thanks for your validation. Yes Peter's solution is the fastest, faster than the previous one by saving 25% time. It was missed out in my previous testing. 
Jin

-----Original Message-----
From: Pascal Oettli [mailto:kridox at ymail.com] 
Sent: Wednesday, 4 July 2012 2:07 PM
To: Li Jin
Cc: r-help at r-project.org
Subject: Re: [R] Is it possible to remove this loop? [SEC=UNCLASSIFIED]



Le 04/07/2012 12:43, Peter Ehlers a ?crit :
I got the same result. Petr's solution is the fastest. Good to know it.

Pascal Oettli
Geoscience Australia Disclaimer: This e-mail (and files transmitted with it) is intended only for the person or entity to which it is addressed. If you are not the intended recipient, then you have received this e-mail by mistake and any use, dissemination, forwarding, printing or copying of this e-mail and its file attachments is prohibited. The security of emails transmitted cannot be guaranteed; by forwarding or replying to this email, you acknowledge and accept these risks.