If statement

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

If statement

Val-17
Hi all,

I am trying to use the  if else statement and create  two new columns
based on the existing two columns.  Below please find my sample data,

dat1 <-read.table(text="ID  a b c d
A private couple  25 35
B private single  24 38
C none  single    28 32
E none none 20 36 ",header=TRUE,stringsAsFactors=F)

dat1$z <- "Zero"
dat1$y <-  0

if a is "private" and (b is either "couple" rr "single"
    then  z value = a's value   and y value = c's value
if a is "none" and  ( b is either couple of single then  z= private
  then  z value =b's value  qnd  y value= d's value
else z value= Zero and y value=0

the desired out put looks like
ID          a      b      c     d     z       y
1  A private couple 25 35 private 25
2  B private single 24 38 private 24
3  C    none single 28 32 single  32
4  E    none   none 20 36 Zero    0

my attempt

if (dat1$a =="private"  &  (dat1$b =="couple"| dat1$b =="single"))
{
      dat1$z      <-   dat1$a
      dat1$y      <-   dat1$c
}

else if (dat1$a =="none"  &  (dat1$b =="couple"| dat1$b =="single")) {
    dat1$z      <-   dat1$b
    dat1$y      <-   dat1$c
  }
else
{ default value}
did not wok, how could I fix this?
Thank you in advance

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: If statement

Bert Gunter-2
You appear to be confusing && with &  and || with |  ; (the first of each
pair take a logical expression, the second of each a logical vector) ...
as well as if ... else with ifelse (the first is a flow control statement
taking a logical expression; the second is a function taking a logical
vector as an argument).  I suggest you spend some time with an appropriate
R tutorial to clarify your understanding. You'll get a better explanation
and examples if you do so than anything I can provide you.

Incidentally, in future, do not tell us "it did not work." Provide the
specific error message that burped out.

Cheers,
Bert


Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Thu, Sep 12, 2019 at 4:07 PM Val <[hidden email]> wrote:

> Hi all,
>
> I am trying to use the  if else statement and create  two new columns
> based on the existing two columns.  Below please find my sample data,
>
> dat1 <-read.table(text="ID  a b c d
> A private couple  25 35
> B private single  24 38
> C none  single    28 32
> E none none 20 36 ",header=TRUE,stringsAsFactors=F)
>
> dat1$z <- "Zero"
> dat1$y <-  0
>
> if a is "private" and (b is either "couple" rr "single"
>     then  z value = a's value   and y value = c's value
> if a is "none" and  ( b is either couple of single then  z= private
>   then  z value =b's value  qnd  y value= d's value
> else z value= Zero and y value=0
>
> the desired out put looks like
> ID          a      b      c     d     z       y
> 1  A private couple 25 35 private 25
> 2  B private single 24 38 private 24
> 3  C    none single 28 32 single  32
> 4  E    none   none 20 36 Zero    0
>
> my attempt
>
> if (dat1$a =="private"  &  (dat1$b =="couple"| dat1$b =="single"))
> {
>       dat1$z      <-   dat1$a
>       dat1$y      <-   dat1$c
> }
>
> else if (dat1$a =="none"  &  (dat1$b =="couple"| dat1$b =="single")) {
>     dat1$z      <-   dat1$b
>     dat1$y      <-   dat1$c
>   }
> else
> { default value}
> did not wok, how could I fix this?
> Thank you in advance
>
> ______________________________________________
> [hidden email] 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.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: If statement

Jeff Newmiller
In reply to this post by Val-17
Use ifelse function, not if. If is only good for one logical value at a time, but you are working with long vectors of values simultaneously. I have no interest in doing all of your workfor you, but the concept is

cpl_or_sngl <- dat1$b %in% c( "couple", "single" )
a_pvt <- "private" == dat1$a
dat1$z <- with( dat1, ifelse( a_pvt & cpl_or_sngl, a, "Zero" ) )
dat1$y <- with( dat1, ifelse( a_pvt & cpl_or_sngl, c, 0 ) )

On September 12, 2019 4:06:59 PM PDT, Val <[hidden email]> wrote:

>Hi all,
>
>I am trying to use the  if else statement and create  two new columns
>based on the existing two columns.  Below please find my sample data,
>
>dat1 <-read.table(text="ID  a b c d
>A private couple  25 35
>B private single  24 38
>C none  single    28 32
>E none none 20 36 ",header=TRUE,stringsAsFactors=F)
>
>dat1$z <- "Zero"
>dat1$y <-  0
>
>if a is "private" and (b is either "couple" rr "single"
>    then  z value = a's value   and y value = c's value
>if a is "none" and  ( b is either couple of single then  z= private
>  then  z value =b's value  qnd  y value= d's value
>else z value= Zero and y value=0
>
>the desired out put looks like
>ID          a      b      c     d     z       y
>1  A private couple 25 35 private 25
>2  B private single 24 38 private 24
>3  C    none single 28 32 single  32
>4  E    none   none 20 36 Zero    0
>
>my attempt
>
>if (dat1$a =="private"  &  (dat1$b =="couple"| dat1$b =="single"))
>{
>      dat1$z      <-   dat1$a
>      dat1$y      <-   dat1$c
>}
>
>else if (dat1$a =="none"  &  (dat1$b =="couple"| dat1$b =="single")) {
>    dat1$z      <-   dat1$b
>    dat1$y      <-   dat1$c
>  }
>else
>{ default value}
>did not wok, how could I fix this?
>Thank you in advance
>
>______________________________________________
>[hidden email] 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.

--
Sent from my phone. Please excuse my brevity.

______________________________________________
[hidden email] 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.