Yes here it is.  I actually convert them all as strings, initially using
options(stringsAsFactors=F) at the top of my code.

This what the initial dataframe looks like.  Please note this is a toy
dataset:

names    X    Y    Z    AorB
S1    BB    BB    BB    A
S2    AA    BB    BB    A
S3    AB    AB    AA    B
S4    AA    AA    NA    B


And the code to create this initial dataframe is:

names <- c("S1", "S2", "S3", "S4")
X <- c("BB", "AA", "AB", "AA")
Y <- c("BB", "BB", "AB", "AA")
Z <- c("BB", "BB", "AA", NA)
AorB <- c("A", "A", "B", "B")

sample <- data.frame(names, X, Y, Z, AorB)


The final data.frame should look like:

names  X    Y    Z    AorB
S1    0    0    0    A
S2    2    0    0    A
S3    1    1    0    B
S4    0    0    NA B

You're right! - I'll should be able to globally change all ABs and BAs to
1s. Thanks:)  I'm not exactly sure how to change AA and BB depending on
AorB for each row though.  Thoughts?

Thanks for your help thus far, David.

Best, Priya


On Wed, May 16, 2012 at 6:53 AM, David L Carlson <dcarl...@tamu.edu> wrote:

> Can you show us what you want the final data.frame to look like? You've
> created five variables stored as factors and you seem to be trying to
> change
> those to numeric values? Is that correct?
>
> Since AB and BA are always set to 1, you could just replace those values
> globally rather than mess with the ifelse commands for those values. Only
> AA
> and BB are affected by the value of AorB.
>
> Your apply() function processes the data.frame by row so i is a vector
> consisting of all the values in the row. You seem to be coding as if i was
> a
> single integer (as in a for loop).
>
> ----------------------------------------------
> David L Carlson
> Associate Professor of Anthropology
> Texas A&M University
> College Station, TX 77843-4352
>
>
> > -----Original Message-----
> > From: r-help-boun...@r-project.org [mailto:r-help-bounces@r-
> > project.org] On Behalf Of Priya Bhatt
> > Sent: Wednesday, May 16, 2012 3:08 AM
> > To: r-help@r-project.org
> > Subject: [R] Help needed for efficient way to loop through rows and
> > columns
> >
> > Dear R-helpers:
> >
> > I am trying to write a script that iterates through a dataframe that
> > looks
> > like this:
> >
> >
> > Example dataset called "sample":
> >
> > names <- c("S1", "S2", "S3", "S4")
> > X <- c("BB", "AB", "AB", "AA")
> > Y <- c("BB", "BB", "AB", "AA")
> > Z <- c("BB", "BB", "AB", NA)
> > AorB <- c("A", "A", "A", "B")
> >
> > sample <- data.frame(names, X, Y, Z, AorB)
> >
> >
> > for a given row,
> >
> > if AorB == A, then AA == 2, AB = 1, BA = 1, BB = 0
> >
> > if AorB == B, then AA == 0, AB = 1, BA = 1, BB = 2
> >
> > I've been trying  to write this using apply and ifelse statements in
> > hopes
> > that my code runs quickly, but I'm afraid I've make a big mess.  See
> > below:
> >
> > apply(sample, 1, function(i) {
> >
> >
> >   ifelse(sample$AorB[i] == "A",
> >          (ifelse(sample[i,] == "AA", sample[i,] <- 2 ,
> >                  ifelse(sample[i,] == "AB" || sample[i,] == "BA" ,
> > sample[i,] <- 1,
> >                         ifelse(sample[i,] == "BB", sample[i,] <- 0,
> > sample[i,] <- NA )) )
> >           )   , ifelse(sample$AorB[i,] == "B"),
> >          (ifelse(sample[i,] == "AA", sample[i,] <- 0 ,
> >                  ifelse(sample[i,] == "AB" || sample[i,] == "BA" ,
> > sample[i,] <- 1,
> >                         ifelse(sample[i,] == "BB", sample[i,] <- 2,
> > sample[i,] <- NA))))) })
> >
> >
> > Any Advice?
> >
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help@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.
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to