Vincy Pyne
2012-Sep-26 08:55 UTC
[R] Change in order of names after applying "plyr" package
Dear R helpers I have following two data.frames viz. equity_data and param. equity_data = data.frame(security_id = c("Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD"), ason_date = c("10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11", "10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11", "10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11"), security_rate = c(0.597,0.61,0.6,0.63,0.67,0.7,0.74,0.735, 7.61,0.795,0.796, 0.84, 8.5,8.1,8.9,8.9,8.9,9,9,9,9,9,9,9,3.21,3.22,3.12, 3.51, 3.5, 3.37, 3.25, 3, 3.07, 3, 2.94, 2.6)) param = data.frame(confidence_level = c(0.99), holding_period = c(10), calculation_method = "MC", no_simulation_mc = c(100)) library(plyr) library(reshape2) attach(equity_data) attach(param) security_names = unique(equity_data$security_id) # (security_names are used further in R code not included here) alpha = param$confidence_level t = param$holding_period n = param$no_simulation_mc method = param$calculation_method mc_VaR = function(security_id, ason_date, security_rate) { security_rate_returns <- NULL for (i in(1:length(ason_date)-1)) { security_rate_returns[i] = log(security_rate[i]/security_rate[i+1]) } return_mean = mean(security_rate_returns) return_sd = sd(security_rate_returns) simulation = rnorm(n, return_mean, return_sd) qq = sort(simulation, decreasing = TRUE) VaR_mc = -qq[alpha * n]*sqrt(t) return(VaR_mc) } result_method_other <- dlply(.data = equity_data, .variables = "security_id", .fun = function(x) mc_VaR(ason_date = x$ason_date, security_id = x$security_id, security_rate = x$security_rate))> result_method_other$AB [1] 0.2657424 $AD [1] 0.212061 $Air [1] 6.789733 attr(,"split_type") [1] "data.frame" attr(,"split_labels") security_id 1 AB 2 AD 3 Air MY PROBLEM : My original data (i.e. equity_data) has the order of "Air", "AB" and "AD". However, after applying plyr, my order (and corresponding result) has changed to "AB", "AD" "Air". I need to maintain my original order of "Air", "AB" and "AD". How do I modify my R code for this? Kindly guide Vincy [[alternative HTML version deleted]]
jim holtman
2012-Sep-26 12:17 UTC
[R] Change in order of names after applying "plyr" package
Here is one of the places that you need a 'factor' to create the ordering you want; notice the statement that I added:> equity_data = data.frame(security_id = c("Air", "Air", "Air", "Air"+ , "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "AB" + , "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB" + , "AB", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD" + , "AD", "AD", "AD") + , ason_date = c("10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12" + , "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12" + ,"1-Jan-12", "31-Dec-11", "30-Dec-11", "10-Jan-12","9-Jan-12" + ,"8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12" + ,"3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11" + , "10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12" + ,"5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12" + , "31-Dec-11", "30-Dec-11") + , security_rate = c(0.597,0.61,0.6,0.63,0.67,0.7,0.74,0.735 + , 7.61,0.795,0.796, 0.84, 8.5,8.1,8.9,8.9,8.9,9,9,9,9,9,9,9 + ,3.21,3.22,3.12, 3.51, 3.5, 3.37, 3.25, 3, 3.07, 3, 2.94, 2.6) + )> > # create a factor with the specified ordering > equity_data$security_id <- factor(equity_data$security_id+ , levels = c("Air", "AB", "AD") + ) Here are the results:> result_method_other$Air [1] 6.229422 $AB [1] 0.2355425 $AD [1] 0.2918782 attr(,"split_type") [1] "data.frame" attr(,"split_labels") security_id 1 Air 2 AB 3 AD On Wed, Sep 26, 2012 at 4:55 AM, Vincy Pyne <vincy_pyne at yahoo.ca> wrote:> Dear R helpers > > I have following two data.frames viz. equity_data and param. > > equity_data = data.frame(security_id = c("Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "Air", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD", "AD"), ason_date = c("10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11", "10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11", "10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", > "30-Dec-11"), security_rate = c(0.597,0.61,0.6,0.63,0.67,0.7,0.74,0.735, 7.61,0.795,0.796, 0.84, 8.5,8.1,8.9,8.9,8.9,9,9,9,9,9,9,9,3.21,3.22,3.12, 3.51, 3.5, 3.37, 3.25, 3, 3.07, 3, 2.94, 2.6)) > > param = data.frame(confidence_level = c(0.99), holding_period = c(10), calculation_method = "MC", no_simulation_mc = c(100)) > > > library(plyr) > library(reshape2) > > attach(equity_data) > attach(param) > > security_names = unique(equity_data$security_id) > # (security_names are used further in R code not included here) > > alpha = param$confidence_level > t = param$holding_period > n = param$no_simulation_mc > method = param$calculation_method > > > mc_VaR = function(security_id, ason_date, security_rate) > { > security_rate_returns <- NULL > for (i > in(1:length(ason_date)-1)) > { > security_rate_returns[i] = log(security_rate[i]/security_rate[i+1]) > } > > return_mean = mean(security_rate_returns) > return_sd = sd(security_rate_returns) > simulation = rnorm(n, return_mean, return_sd) > qq = sort(simulation, decreasing = TRUE) > VaR_mc = -qq[alpha * n]*sqrt(t) > return(VaR_mc) > } > > > result_method_other <- dlply(.data = equity_data, .variables = "security_id", .fun = function(x) > > mc_VaR(ason_date = x$ason_date, security_id = x$security_id, > security_rate = x$security_rate)) > > >> result_method_other > $AB > [1] 0.2657424 > > $AD > [1] 0.212061 > > $Air > [1] 6.789733 > > attr(,"split_type") > [1] "data.frame" > attr(,"split_labels") > security_id > 1 AB > 2 AD > 3 Air > > > MY PROBLEM : > > My original data (i.e. equity_data) has the order of "Air", "AB" and "AD". However, after applying plyr, my order (and corresponding result) has changed to "AB", "AD" "Air". > > > I need to > maintain my original order of "Air", "AB" and "AD". How do I modify my R code for this? > > Kindly guide > > > Vincy > > > [[alternative HTML version deleted]] > > > ______________________________________________ > 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. >-- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it.