Yan Wu
2014-Nov-07 21:54 UTC
[R] Help with a for complex for loop that looks into another data frame
Hello everyone! I am working on a stock trading algorithm. I have created a data frame with the stocks, and a summary data frame, master_df_ex, and master_df_ex_sum, respectively. The goal is to create something each day that has equal long and shorts, and thus for each day, the sum of the ls_flag = 0. For master_df_ex, there is a rank by strength of magnitude column, up or down column, then a long or short column. The ls_flag is set by the updn_flag for the stocks that are ranked in the top half (in this case, since we have 4 per day, rank = 1 and rank = 2 are set by updn_flag. *I need to create a process to fill in the NA's in the ls_flag.* My thinking is to create a summary table, where i run a summary,replace the contents, until both the NA are 0 and the sum of the ls_flag =0. For example, here is the current data: asof_dt<-rep(seq(as.Date("2014-10-01"), as.Date("2014-10-03"), "days"),4) rank_mag<-(rep(seq(1,4),3)) updn_flag<-c(-1,-1,-1,1,-1,-1,1,1,-1,1,-1,-1) ls_flag<-c(-1,-1,NA,NA,-1,-1,NA,NA,-1,1,NA,NA) master_df_ex<-data.frame(asof_dt,rank_mag,updn_flag,ls_flag) master_df_ex<-arrange(master_df_ex,asof_dt,rank_mag) master_df_ex_sum<-summarise(master_df,tot_flag = sum(ls_flag, na.rm = TRUE), tot_NA = sum(is.na(ls_flag)))> master_df_exasof_dt rank_mag updn_flag ls_flag 1 2014-10-01 1 -1 -1 2 2014-10-01 2 1 1 3 2014-10-01 3 1 NA 4 2014-10-01 4 1 NA 5 2014-10-02 1 -1 -1 6 2014-10-02 2 -1 -1 7 2014-10-02 3 -1 NA 8 2014-10-02 4 1 NA 9 2014-10-03 1 1 1 10 2014-10-03 2 1 1 11 2014-10-03 3 1 NA 12 2014-10-03 4 -1 NA> master_df_ex_sumSource: local data frame [3 x 3] asof_dt tot_flag tot_NA 1 2014-10-01 0 2 2 2014-10-02 -2 2 3 2014-10-03 2 2 For 2014-10-02, since the the tot_flag = -2, the NA's for this date should both be -1 For 2014-10-03, since the tot_flag = 2, the NA's should both be -1 For 2014-10-01 (hardest one): The logic should look at 2014-10-01 in master_df_ex_sum, since tot_NA is not 0, go into master_df_ex and find the lowest rank by rank_mag where ls_flag is NA. Assign ls_flag = 1. Then run the summary again, the NAs will be 1, and the sum of ls_flag will be 1. Then it should go into master_df_ex again, and assign a -1 to line 4. Then the summary will have 0 and 0 and this date should be done. I hope that makes sense! Any help is appreciated! Thank you very much. -- Yan Wu 510-333-3188 <http://bigkidsbighearts.org> yannikin at gmail.com [[alternative HTML version deleted]]