[R] creating a new variable, conditional on the value of an existing variable, selected conditionally

Doran, Harold HDoran at air.org
Wed Jun 9 19:15:32 CEST 2010


How about this:

f <- data.frame(A=c(0,0,1,1), B=c(0,1,0,1), C=c(1,1,0,1), D=c(3,1,2,3))

N <- nrow(f)

mat <- cbind(1:N,f$D)

f$E <- f[mat]

f
  A B C D E
1 0 0 1 3 1
2 0 1 1 1 0
3 1 0 0 2 0
4 1 1 1 3 1

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Malcolm Fairbrother
Sent: Wednesday, June 09, 2010 10:03 AM
To: r-help at r-project.org
Subject: [R] creating a new variable, conditional on the value of an existing variable, selected conditionally

Dear all,

I have a data frame f, with four variables:

f <- data.frame(A=c(0,0,1,1), B=c(0,1,0,1), C=c(1,1,0,1), D=c(3,1,2,3))
f
  A B C D
1 0 0 1 3
2 0 1 1 1
3 1 0 0 2
4 1 1 1 3

I want to create a new variable (f$E), such that each of its elements is drawn from either f$A, f$B, or f$C, according to the value (for each row) of f$D (values of which range from 1 to 3).

In the first row, D is 3, so I want the value from the third variable (C), which for the first row is 1. In the second row, D is 1, so I want the value from the first variable (A), which for the second row is 0. And so forth, such that in the end my new data frame looks like:

  A B C D E
1 0 0 1 3 1
2 0 1 1 1 0
3 1 0 0 2 0
4 1 1 1 3 1

My question is: How do I do this for a much larger dataset, where my "index variable" (f$D in this example) actually indexes a much larger number of variables (not just three)?

I know that in principle I could do this with a long series of nested ifelse statements (as below), but I assume there is some less cumbersome option, and I'd like to know what it is. Any help would be much appreciated. Apologies if I'm missing something obvious.

f$E <- ifelse(f$D==3, f$C, ifelse(f$D==2, f$B, f$A))

Thanks,
Malcolm

______________________________________________
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.



More information about the R-help mailing list