Hello, I have a data frame which looks like this:> head(pt)eidQ phenoQ phenoH 1 1000017 -9 -9 2 1000025 -9 -9 3 1000038 -9 1 4 1000042 -9 -9 5 1000056 -9 -9 6 1000074 -9 -9 7 1000038 -9 1 8 1000127 2 1 9 1000690 2 -9 10 1000711 2 -9 11 1001431 2 1 12 1001710 -9 1 I would like to create the 3rd column called "pheno" which would have these values: -9,-9,1,-9,-9,-9,1,2,2,2,2,1 so in other words: -if -9 appears in both phenoQ and phenoH I will have -9 in pheno -if 2 appears in any of phenoQ or phenoH I will have 2 in pheno -if I have -9 and 1 or 1 and -9 in those columns I will have 1 in pheno -if I have -9 and 2 or 2 and -9 in those columns I will have 2 in pheno Can you please tell me how my if else statement would look like or any other way how to do that in R if my data frame name is "pt" Thanks Ana Ana
does this look ok: pt$pheno=ifelse(pt$phenoQ==-9 & pt$phenoH==-9,-9,ifelse(pt$phenoH==2 | pt$phenoQ==2,2,1)) On Wed, Aug 7, 2019 at 1:40 PM Ana Marija <sokovic.anamarija at gmail.com> wrote:> > Hello, > > I have a data frame which looks like this: > > > head(pt) > eidQ phenoQ phenoH > 1 1000017 -9 -9 > 2 1000025 -9 -9 > 3 1000038 -9 1 > 4 1000042 -9 -9 > 5 1000056 -9 -9 > 6 1000074 -9 -9 > 7 1000038 -9 1 > 8 1000127 2 1 > 9 1000690 2 -9 > 10 1000711 2 -9 > 11 1001431 2 1 > 12 1001710 -9 1 > > I would like to create the 3rd column called "pheno" which would have > these values: > -9,-9,1,-9,-9,-9,1,2,2,2,2,1 > > so in other words: > -if -9 appears in both phenoQ and phenoH I will have -9 in pheno > -if 2 appears in any of phenoQ or phenoH I will have 2 in pheno > -if I have -9 and 1 or 1 and -9 in those columns I will have 1 in pheno > -if I have -9 and 2 or 2 and -9 in those columns I will have 2 in pheno > > Can you please tell me how my if else statement would look like or any > other way how to do that in R if my data frame name is "pt" > > Thanks > Ana > Ana
pmax() should work in this instance, as in any case you want the larger value. Andrew -- Andrew Robinson Director, CEBRA, School of BioSciences Reader & Associate Professor in Applied Statistics Tel: (+61) 0403 138 955 School of Mathematics and Statistics Fax: (+61) 03 8344 4599 University of Melbourne, VIC 3010 Australia Email: apro at unimelb.edu.au Website: http://cebra.unimelb.edu.au/ ________________________________ From: R-help <r-help-bounces at r-project.org> on behalf of Ana Marija <sokovic.anamarija at gmail.com> Sent: Thursday, August 8, 2019 4:37 am To: r-help Subject: [R] Help with if else statement Hello, I have a data frame which looks like this:> head(pt)eidQ phenoQ phenoH 1 1000017 -9 -9 2 1000025 -9 -9 3 1000038 -9 1 4 1000042 -9 -9 5 1000056 -9 -9 6 1000074 -9 -9 7 1000038 -9 1 8 1000127 2 1 9 1000690 2 -9 10 1000711 2 -9 11 1001431 2 1 12 1001710 -9 1 I would like to create the 3rd column called "pheno" which would have these values: -9,-9,1,-9,-9,-9,1,2,2,2,2,1 so in other words: -if -9 appears in both phenoQ and phenoH I will have -9 in pheno -if 2 appears in any of phenoQ or phenoH I will have 2 in pheno -if I have -9 and 1 or 1 and -9 in those columns I will have 1 in pheno -if I have -9 and 2 or 2 and -9 in those columns I will have 2 in pheno Can you please tell me how my if else statement would look like or any other way how to do that in R if my data frame name is "pt" Thanks Ana Ana ______________________________________________ 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]]
The ifelse() construction is fast, but after a couple of nested iterations, it gets messy and error-prone; so I believe to be avoided. In your case, there is a much better alternative, ?pmax . Ergo, something like: pt$pheno <- do.call(pmax, pt[, -1]) ?do.call is necessary to pass the list of columns pt[, -1] to pmax. 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 Wed, Aug 7, 2019 at 11:55 AM Ana Marija <sokovic.anamarija at gmail.com> wrote:> does this look ok: > > pt$pheno=ifelse(pt$phenoQ==-9 & pt$phenoH==-9,-9,ifelse(pt$phenoH==2 | > pt$phenoQ==2,2,1)) > > On Wed, Aug 7, 2019 at 1:40 PM Ana Marija <sokovic.anamarija at gmail.com> > wrote: > > > > Hello, > > > > I have a data frame which looks like this: > > > > > head(pt) > > eidQ phenoQ phenoH > > 1 1000017 -9 -9 > > 2 1000025 -9 -9 > > 3 1000038 -9 1 > > 4 1000042 -9 -9 > > 5 1000056 -9 -9 > > 6 1000074 -9 -9 > > 7 1000038 -9 1 > > 8 1000127 2 1 > > 9 1000690 2 -9 > > 10 1000711 2 -9 > > 11 1001431 2 1 > > 12 1001710 -9 1 > > > > I would like to create the 3rd column called "pheno" which would have > > these values: > > -9,-9,1,-9,-9,-9,1,2,2,2,2,1 > > > > so in other words: > > -if -9 appears in both phenoQ and phenoH I will have -9 in pheno > > -if 2 appears in any of phenoQ or phenoH I will have 2 in pheno > > -if I have -9 and 1 or 1 and -9 in those columns I will have 1 in pheno > > -if I have -9 and 2 or 2 and -9 in those columns I will have 2 in pheno > > > > Can you please tell me how my if else statement would look like or any > > other way how to do that in R if my data frame name is "pt" > > > > Thanks > > Ana > > Ana > > ______________________________________________ > 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]]
Hi Ana, Or just for a bit of fun: pt<-read.table(text="eidQ phenoQ phenoH 1000017 -9 -9 1000025 -9 -9 1000038 -9 1 1000042 -9 -9 1000056 -9 -9 1000074 -9 -9 1000038 -9 1 1000127 2 1 1000690 2 -9 1000711 2 -9 1001431 2 1 1001710 -9 1", header=TRUE) pt$pheno<-apply(pt[,2:3],1,FUN=max) Jim On Thu, Aug 8, 2019 at 4:37 AM Ana Marija <sokovic.anamarija at gmail.com> wrote:> > Hello, > > I have a data frame which looks like this: > > > head(pt) > eidQ phenoQ phenoH > 1 1000017 -9 -9 > 2 1000025 -9 -9 > 3 1000038 -9 1 > 4 1000042 -9 -9 > 5 1000056 -9 -9 > 6 1000074 -9 -9 > 7 1000038 -9 1 > 8 1000127 2 1 > 9 1000690 2 -9 > 10 1000711 2 -9 > 11 1001431 2 1 > 12 1001710 -9 1 > > I would like to create the 3rd column called "pheno" which would have > these values: > -9,-9,1,-9,-9,-9,1,2,2,2,2,1 > > so in other words: > -if -9 appears in both phenoQ and phenoH I will have -9 in pheno > -if 2 appears in any of phenoQ or phenoH I will have 2 in pheno > -if I have -9 and 1 or 1 and -9 in those columns I will have 1 in pheno > -if I have -9 and 2 or 2 and -9 in those columns I will have 2 in pheno > > Can you please tell me how my if else statement would look like or any > other way how to do that in R if my data frame name is "pt" > > Thanks > Ana > Ana > > ______________________________________________ > 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.