[R] Multiple if function

Bert Gunter bgunter.4567 at gmail.com
Tue Sep 15 23:42:42 CEST 2015


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 <dcarlson at 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-bounces at r-project.org] On Behalf Of Bert Gunter
> Sent: Tuesday, September 15, 2015 3:51 PM
> To: Peter Alspach
> Cc: r-help at 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.Alspach at 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-bounces at r-project.org] On Behalf Of Maria Lathouri
>> Sent: Tuesday, 15 September 2015 10:57 p.m.
>> To: r-help at 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 at 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 at 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 at 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.



More information about the R-help mailing list