[R] Change in order of names after applying "plyr" package

jim holtman jholtman at gmail.com
Wed Sep 26 14:17:22 CEST 2012


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.




More information about the R-help mailing list