[R] Reshape package and variable assignment

Hosack, Michael mhosack at state.pa.us
Fri Aug 20 15:35:15 CEST 2010


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")



More information about the R-help mailing list