[R] Conditions
Bert Gunter
bgunter@4567 @end|ng |rom gm@||@com
Wed Nov 27 04:56:28 CET 2019
I generally find nested ifelse's to be confusing and prone to error, so I
usually prefer to proceed sequentially using subsetting with logicals or
replicated, but not nested ifelse's. In your example, the translation to
logical indexing seems pretty straightforward.
Using your example:
> dat2 <-within(dat2,
{
d4 <- d1 ## d1. 0 when d1 == 0
d4[!d4]<- d2[!d4]
d4[!d4]<- d3[!d4]
})
> dat2
ID d1 d2 d3 d4
1 A 0 25 35 25
2 B 12 22 0 12
3 C 0 0 31 31
4 E 10 20 30 10
5 F 0 0 0 0
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 Tue, Nov 26, 2019 at 3:15 PM Val <valkremk using gmail.com> wrote:
> HI All, I am having a little issue in my ifelse statement,
> The data frame looks like as follow.
>
> dat2 <-read.table(text="ID d1 d2 d3
> A 0 25 35
> B 12 22 0
> C 0 0 31
> E 10 20 30
> F 0 0 0",header=TRUE,stringsAsFactors=F)
> I want to create d4 and set the value based on the following conditions.
> If d1 !=0 then d4=d1
> if d1 = 0 and d2 !=0 then d4=d2
> if (d1 and d2 = 0) and d3 !=0 then d4=d3
> if all d1, d2 and d3 =0 then d4=0
>
> Here is the desired output and my attempt
> ID d1 d2 d3 d4
> A 0 25 35 25
> B 12 22 0 12
> C 0 0 31 31
> E 10 20 30 10
> F 0 0 0 0 0
>
> My attempt
> dat2$d4 <- 0
> dat2$d4 <- ifelse((dat2$d1 =="0"), dat2$d2, ifelse(dat2$d2 == "0"),
> dat2$d3, 0)
> but not working.
>
> Thank you.
>
> ______________________________________________
> R-help using 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]]
More information about the R-help
mailing list