R Experts,

I would like to create a series of variables without having to assign a 
separate line of code 
for each new variable. My abbreviated dataframe (DF) contains two groups of 
linked variables 
(SP1:SP3) and (CAU1:CAU3). Within SP1:SP3 are character codes (full dataframe 
contains 26 
unique codes and SP1:SP9, CAU1:CAU9). CAU1 represents the quantitative 
measurement of code x 
in variable SP1, and so on through SP3 and CAU3. What I want to do is create a 
series of new 
variables (one for each unique species code....four in this shortened example) 
that contain 
the matching CAU variable value for each corresponding species code listed for 
each row of the
data set. Example (row 1), the new variable SMB would equal 3 (CAU1) and YP, 
WE, and LMB would 
contain zero. Example (row 2), the new variable YP would contain 30, and WE 
would contain 6, 
whereas SMB and LMB would contain zero. If this description is unclear, the 
examples below should 
illustrate what I what to do. 

I have been advised that the reshape package could be useful here but I have 
been unsuccessful 
at implementing it. I know there has to be a way for this to be done in a few 
steps rather than 
a separate line of code for each new variable. 


Thank you,

Mike



Current method (inefficient): one line per species, example data frame

DF$YP <- with(DF, ifelse(SP1 %in% 'YP', CAU1, ifelse(SP2 %in% 'YP', CAU2,
                      ifelse(SP3 %in% 'YP', CAU3, 0))))

DF$SMB <- with(DF, ifelse(SP1 %in% 'SMB', CAU1, ifelse(SP2 %in% 'SMB', CAU2,
                      ifelse(SP3 %in% 'SMB', CAU3, 0))))

DF$LMB <- with(DF, ifelse(SP1 %in% 'LMB', CAU1, ifelse(SP2 %in% 'LMB', CAU2,
                      ifelse(SP3 %in% 'LMB', CAU3, 0))))

DF$WE <- with(DF, ifelse(SP1 %in% 'WE', CAU1, ifelse(SP2 %in% 'WE', CAU2,
                      ifelse(SP3 %in% 'WE', CAU3, 0))))



DF <-
structure(list(SP1 = c("SMB", NA, NA, "SMB"), SP2 = c(NA, "YP", 
NA, NA), SP3 = c(NA, "WE", "LMB", NA), CAU1 = c("3", "0", "0", 
"15"), CAU2 = c("0", "30", "0", "0"), CAU3 = c("0", "6", "5", 
"0")), .Names = c("SP1", "SP2", "SP3", "CAU1", "CAU2", "CAU3"
), row.names = c(NA, -4L), class = "data.frame")

______________________________________________
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