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]]

