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]]
Jim Moon <moonja <at> ohsu.edu> writes:> 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] > } > }You could use: m1$major_allele <- ifelse( m1$Freq1 == m1$MAF, m1$Al1, m1$Al2 ) Greg
... or slightly less verbose: m1 <- within(m1,major_allele <- ifelse( Freq1 == MAF, Al1, Al2 )) ?within Cheers, Bert On Mon, Nov 29, 2010 at 10:25 AM, Greg Johnson <greg at nosnhoj.org> wrote:> Jim Moon <moonja <at> ohsu.edu> writes: > >> 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] >> ? } >> } > > You could use: > > m1$major_allele <- ifelse( ?m1$Freq1 == m1$MAF, m1$Al1, ?m1$Al2 ) > > Greg > > ______________________________________________ > 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. >-- Bert Gunter Genentech Nonclinical Biostatistics
Jim Moon <moonja <at> ohsu.edu> writes:> 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] > } > }You could use: m1$major_allele <- ifelse( m1$Freq1 == m1$MAF, m1$Al1, m1$Al2 ) Greg --------------------------------------------------- Thank you for the suggestion, Greg. 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 "ifelse" (I swapped Al1 and Al2 from before, but this does not affect the nature of the output): m1$major_allele <- ifelse( m1$Freq1 == m1$MAF, m1$Al2, m1$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 [[alternative HTML version deleted]]