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
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 <valkremk at gmail.com> 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 > > ______________________________________________ > 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. >[[alternative HTML version deleted]]
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 <valkremk at gmail.com> 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 > >______________________________________________ >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.-- Sent from my phone. Please excuse my brevity.