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_ex
      asof_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_sum
Source: 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]]