Thank you for the suggestion, Bill. The result is not quite what I would like. Here's sample code for you or anyone else who may be interested: Al1 = c('A','C','C','C') Al2 = c('G','G','G','T') Freq1 = c(0.0078,0.0567,0.9434,0.9908) MAF = c(0.0078,0.0567,0.0566,0.0092) m1 = data.frame(Al1=Al1, Al2=Al2,Freq1=Freq1,MAF=MAF,major_allele='') m1 Al1 Al2 Freq1 MAF major_allele 1 A G 0.0078 0.0078 2 C G 0.0567 0.0567 3 C G 0.9434 0.0566 4 C T 0.9908 0.0092 Using the suggestion involving "with()" (I swapped Al1 and Al2 from before, but this does not affect the nature of the output): m1$major_allele <- with(m1, ifelse(Freq1==MAF, Al2, Al1));m1 Al1 Al2 Freq1 MAF major_allele 1 A G 0.0078 0.0078 1 2 C G 0.0567 0.0567 1 3 C G 0.9434 0.0566 2 4 C T 0.9908 0.0092 2 The output I desire is: Al1 Al2 Freq1 MAF major_allele 1 A G 0.0078 0.0078 G 2 C G 0.0567 0.0567 G 3 C G 0.9434 0.0566 C 4 C T 0.9908 0.0092 C Jim -----Original Message----- From: William Dunlap [mailto:wdunlap at tibco.com] Sent: Monday, November 29, 2010 10:02 AM To: Jim Moon Subject: RE: [R] how to use by() ? m1$major_allele <- with(m1, ifelse(Freq1==MAF, Al1, Al2)) Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Jim Moon > Sent: Monday, November 29, 2010 9:44 AM > To: r-help at r-project.org > Subject: [R] how to use by() ? > > Hello, All! > > How might one accomplish this using the by() function? > m1 is a data frame. > > # populate column "m1$major_allele" > for ( i in 1:length(m1$major_allele)) { > if ( m1$Freq1[i] == m1$MAF[i]){ > m1$major_allele[i] = m1$Al1[i] > } > else{ > m1$major_allele[i] = m1$Al2[i] > } > } > > > Jim > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > 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. >
ifelse(cond,ifTrue,ifFalse) doesn't do what you want when ifTrue or ifElse is a factor. You can use as.character on the factors > with(m1, ifelse(Freq1==MAF, as.character(Al2), as.character(Al1))) [1] "G" "G" "C" "C" or use the stringsAsFactors=FALSE argument to data.frame (or read.table) when you make the data.frame. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Jim Moon > Sent: Monday, November 29, 2010 10:37 AM > To: r-help at r-project.org > Subject: [R] FW: how to use by() ? > > Thank you for the suggestion, Bill. The result is not quite > what I would like. Here's sample code for you or anyone else > who may be interested: > > Al1 = c('A','C','C','C') > Al2 = c('G','G','G','T') > Freq1 = c(0.0078,0.0567,0.9434,0.9908) > MAF = c(0.0078,0.0567,0.0566,0.0092) > m1 = data.frame(Al1=Al1, > Al2=Al2,Freq1=Freq1,MAF=MAF,major_allele='') > m1 > > Al1 Al2 Freq1 MAF major_allele > 1 A G 0.0078 0.0078 > 2 C G 0.0567 0.0567 > 3 C G 0.9434 0.0566 > 4 C T 0.9908 0.0092 > > > Using the suggestion involving "with()" (I swapped Al1 and > Al2 from before, but this does not affect the nature of the output): > > m1$major_allele <- with(m1, ifelse(Freq1==MAF, Al2, Al1));m1 > > Al1 Al2 Freq1 MAF major_allele > 1 A G 0.0078 0.0078 1 > 2 C G 0.0567 0.0567 1 > 3 C G 0.9434 0.0566 2 > 4 C T 0.9908 0.0092 2 > > > The output I desire is: > Al1 Al2 Freq1 MAF major_allele > 1 A G 0.0078 0.0078 G > 2 C G 0.0567 0.0567 G > 3 C G 0.9434 0.0566 C > 4 C T 0.9908 0.0092 C > > > Jim > > > -----Original Message----- > From: William Dunlap [mailto:wdunlap at tibco.com] > Sent: Monday, November 29, 2010 10:02 AM > To: Jim Moon > Subject: RE: [R] how to use by() ? > > m1$major_allele <- with(m1, ifelse(Freq1==MAF, Al1, Al2)) > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > > > -----Original Message----- > > From: r-help-bounces at r-project.org > > [mailto:r-help-bounces at r-project.org] On Behalf Of Jim Moon > > Sent: Monday, November 29, 2010 9:44 AM > > To: r-help at r-project.org > > Subject: [R] how to use by() ? > > > > Hello, All! > > > > How might one accomplish this using the by() function? > > m1 is a data frame. > > > > # populate column "m1$major_allele" > > for ( i in 1:length(m1$major_allele)) { > > if ( m1$Freq1[i] == m1$MAF[i]){ > > m1$major_allele[i] = m1$Al1[i] > > } > > else{ > > m1$major_allele[i] = m1$Al2[i] > > } > > } > > > > > > Jim > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list > > 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 > 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. >
On Nov 29, 2010, at 1:36 PM, Jim Moon wrote:> Thank you for the suggestion, Bill. The result is not quite what I > would like. Here's sample code for you or anyone else who may be > interested: > > Al1 = c('A','C','C','C') > Al2 = c('G','G','G','T') > Freq1 = c(0.0078,0.0567,0.9434,0.9908) > MAF = c(0.0078,0.0567,0.0566,0.0092) > m1 = data.frame(Al1=Al1, Al2=Al2,Freq1=Freq1,MAF=MAF,major_allele='') > m1 > > Al1 Al2 Freq1 MAF major_allele > 1 A G 0.0078 0.0078 > 2 C G 0.0567 0.0567 > 3 C G 0.9434 0.0566 > 4 C T 0.9908 0.0092 > > > Using the suggestion involving "with()" (I swapped Al1 and Al2 from > before, but this does not affect the nature of the output): > > m1$major_allele <- with(m1, ifelse(Freq1==MAF, Al2, Al1));m1 > > Al1 Al2 Freq1 MAF major_alleleI suspect that you have just been bitten by the data.frame- stringsAsFactors=TRUE crocodile. Since you are comparing floating point numbers, you are also wading in rivers where floating-point crocodiles are also hungry and searching out their next victim. -- David.> 1 A G 0.0078 0.0078 1 > 2 C G 0.0567 0.0567 1 > 3 C G 0.9434 0.0566 2 > 4 C T 0.9908 0.0092 2 > > > The output I desire is: > Al1 Al2 Freq1 MAF major_allele > 1 A G 0.0078 0.0078 G > 2 C G 0.0567 0.0567 G > 3 C G 0.9434 0.0566 C > 4 C T 0.9908 0.0092 C > > > Jim > > > -----Original Message----- > From: William Dunlap [mailto:wdunlap at tibco.com] > Sent: Monday, November 29, 2010 10:02 AM > To: Jim Moon > Subject: RE: [R] how to use by() ? > > m1$major_allele <- with(m1, ifelse(Freq1==MAF, Al1, Al2)) > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > >> -----Original Message----- >> From: r-help-bounces at r-project.org >> [mailto:r-help-bounces at r-project.org] On Behalf Of Jim Moon >> Sent: Monday, November 29, 2010 9:44 AM >> To: r-help at r-project.org >> Subject: [R] how to use by() ? >> >> Hello, All! >> >> How might one accomplish this using the by() function? >> m1 is a data frame. >> >> # populate column "m1$major_allele" >> for ( i in 1:length(m1$major_allele)) { >> if ( m1$Freq1[i] == m1$MAF[i]){ >> m1$major_allele[i] = m1$Al1[i] >> } >> else{ >> m1$major_allele[i] = m1$Al2[i] >> } >> } >> >> >> Jim >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list >> 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 > 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.David Winsemius, MD West Hartford, CT