If dat is large and you want to be efficient about this, then compute only the 
answers you need and put them right where they belong as you go:

dat$result <- NA
idx <- "A" == dat$ASB
dat$result[ idx ] <- 2 * dat$Flow[ idx ]
idx <- "B" == dat$ASB
dat$result[ idx ] <- 5 + dat$Flow[ idx ]
idx <- "C" == dat$ASB
dat$result[ idx ] <- sqrt( dat$Flow[ idx ] )

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

On September 15, 2015 2:42:42 PM PDT, Bert Gunter <bgunter.4...@gmail.com> 
wrote:
>Thanks, David.
>
>I would say, not quite.
>
>What if the alternatives are:
>
>If class = "a" multiply y by 2;
>If class = "b"  add 5 to y;
>If class = "c" take sqrt(y)
> (where y is numeric, say)
>?
>
>Cheers,
>Bert
>Bert Gunter
>
>"Data is not information. Information is not knowledge. And knowledge
>is certainly not wisdom."
>   -- Clifford Stoll
>
>
>On Tue, Sep 15, 2015 at 2:11 PM, David L Carlson <dcarl...@tamu.edu>
>wrote:
>> You could use match() and avoid ifelse():
>>
>>> dat <- data.frame(ASB = c(LETTERS[1:3]), Flow=c(11.51, 9.2, 10.5),
>stringsAsFactors=FALSE)
>>> cat <- LETTERS[1:3]
>>> mult <- c(.1, .15, .2)
>>> dat$Flow * mult[match(dat$ASB, cat)]
>> [1] 1.151 1.380 2.100
>>
>> -------------------------------------
>> David L Carlson
>> Department of Anthropology
>> Texas A&M University
>> College Station, TX 77840-4352
>>
>>
>> -----Original Message-----
>> From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Bert
>Gunter
>> Sent: Tuesday, September 15, 2015 3:51 PM
>> To: Peter Alspach
>> Cc: r-help@r-project.org
>> Subject: Re: [R] Multiple if function
>>
>> ... but this only works if ASBclass is numeric. What if it is a
>factor
>> (or even character)?
>>
>> One can always finesse factors in simple cases like this, but for 2
>> reasons, I don't think it's a good idea.
>>
>> 1. One should make use of a factor's API, rather than its internal
>> integer representation(which, I grant, ain't likely to change);
>>
>> 2. For more complicated alternatives (e.g. entirely different
>> functions depending on the factor value) it won't work anyway.
>>
>> For simple cases, ifelse() seems reasonable; but for more
>alternatives
>> -- say 10 or 50 -- this becomes too cumbersome (imho). I think the
>> split and recombine approach then becomes the best option, but maybe
>> there is some easier, shorter, approach that I am overlooking. Please
>> correct me if this is the case.
>>
>> Best,
>> Bert
>>
>>
>>
>>
>>
>>
>> Bert Gunter
>>
>> "Data is not information. Information is not knowledge. And knowledge
>> is certainly not wisdom."
>>    -- Clifford Stoll
>>
>>
>> On Tue, Sep 15, 2015 at 12:23 PM, Peter Alspach
>> <peter.alsp...@plantandfood.co.nz> wrote:
>>> Tena koe Maria
>>>
>>> It seems you need to multiply Flow by 0.05+ASBClass/20 (i.e., no if
>calls are necessary)
>>>
>>> HTH ....
>>>
>>> Peter Alspach
>>>
>>> -----Original Message-----
>>> From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of
>Maria Lathouri
>>> Sent: Tuesday, 15 September 2015 10:57 p.m.
>>> To: r-help@r-project.org
>>> Subject: [R] Multiple if function
>>>
>>> Dear all,
>>>
>>> I am writing as I would like your help. I have a dataframe with two
>columns, ASB and Flow, where the the first one has values 1, 2 or 3 and
>the second flow data. Something like that:
>>> ASBclass    Flow1              11.51               9.2
>>> 2              10.5
>>> 3               6.7  ...              ...
>>> I would like to produce a third column named eg. deviation where it
>would get me values based on if ASBclass is 1, multiply Flow by 0.1; if
>ASBclass is 2 then multiply Flow by 0.15 and if ASBclass is 3 then
>multiply by 0.2.
>>>
>>> If (ASBclass=1) { deviation<-Flow*0.1}
>>> If (ASBclass=2) { deviation<-Flow*0.15}If (ASBclass=1) {
>deviation<-Flow*0.2} I am not sure whether I should add the else
>function and how can I combine these separate functions.
>>>
>>> Can anyone help me on that?
>>> Thank you very much.
>>>
>>> Kind regardsMaria
>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>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.
>>>
>>> The contents of this e-mail are confidential and may be subject to
>legal privilege.
>>>  If you are not the intended recipient you must not use,
>disseminate, distribute or
>>>  reproduce all or any part of this e-mail or attachments.  If you
>have received this
>>>  e-mail in error, please notify the sender and delete all material
>pertaining to this
>>>  e-mail.  Any opinion or views expressed in this e-mail are those of
>the individual
>>>  sender and may not represent those of The New Zealand Institute for
>Plant and
>>>  Food Research Limited.
>>> ______________________________________________
>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> 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.
>>
>> ______________________________________________
>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>
>______________________________________________
>R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>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.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to