I have this dataset
install.packages("combinat")
install.packages("quantmod")
library(quantmod)
library(combinat)
getSymbols("AAPL",from="2013-01-01")
data<-AAPL
p1<-4
dO<-data[,1]
dC<-data[,4]
emaO<-EMA(dO,n=p1)
emaC<-EMA(dC,n=p1)
and this variables
Pos_emaO_dO_UP<-emaO>dO
Pos_emaO_dO_D<-emaO<dO
Pos_emaC_dC_UP<-emaC>dC
Pos_emaC_dC_D<-emaC<dC
Pos_emaC_dO_D<-emaC<dO
Pos_emaC_dO_UP<-emaC>dO
Pos_emaO_dC_UP<-emaO>dC
Pos_emaO_dC_D<-emaO<dC
or alternatively
Pos_emaO_dO<-ifelse(emaO>dO,"UP",
ifelse(emaO<dO,"D","Equal"))
Pos_emaC_dC<-ifelse(emaC>dC,"UP",
ifelse(emaC<dC,"D","Equal"))
Pos_emaC_dO<-ifelse(emaC>dO,"UP",
ifelse(emaC<dO,"D","Equal"))
Pos_emaO_dC<-ifelse(emaO>dC,"UP",
ifelse(emaO<dC,"D","Equal"))
frame<-data.frame(Pos_emaO_dO_UP,Pos_emaO_dO_D,Pos_emaC_dC_UP,Pos_emaC_dC_D,Pos_emaC_dO_D,Pos_emaC_dO_UP,Pos_emaO_dC_UP,Pos_emaO_dC_D)
vector<-colnames(frame)<-c("Pos_emaO_dO_UP","Pos_emaO_dO_D","Pos_emaC_dC_UP","Pos_emaC_dC_D","Pos_emaC_dO_D","Pos_emaC_dO_UP","Pos_emaO_dC_UP","Pos_emaO_dC_D")
Three<-as.data.frame(combn(vector,3))
Two<-as.data.frame(combn(vector,2))
Four<-as.data.frame(combn(vector,4))
EDITED: I edited my question to this. I need to delete these combinations (V1:Vn) which, for example, has both possible combinations of variable. ex Pos_emaO_dO_UP & Pos_emaO_dO_D. Generally, if the formula before D or UP is same and both (UP & D) are in it, delete this combination. I tried some unique, but with no success.
Note: I want then to use paste like paste(combination,collapse="&") and use this "pasted" combinations to subset the main table then like subset(main_table,"pasted_combination") and run this trough lapply function which I have. Will it works? Thanks
I'm still not quite sure if I understood you right, but consider this example. We have 3 variables ( x1
, x2
, x3
) and each of them can be either Up
or D
or Equal
. To compute all possible combinations of the 3 variables, you can use expand.grid
:
dd <- expand.grid(x1 = c("UP", "D", "Equal"),
x2 = c("UP", "D", "Equal"),
x3 = c("UP", "D", "Equal"))
dd
# x1 x2 x3
#1 UP UP UP
#2 D UP UP
#3 Equal UP UP
#4 UP D UP
#5 D D UP
#6 Equal D UP
#7 UP Equal UP
#8 D Equal UP
#9 Equal Equal UP
#10 UP UP D
#11 D UP D
#12 Equal UP D
#13 UP D D
#14 D D D
#15 Equal D D
#16 UP Equal D
#17 D Equal D
#18 Equal Equal D
#19 UP UP Equal
#20 D UP Equal
#21 Equal UP Equal
#22 UP D Equal
#23 D D Equal
#24 Equal D Equal
#25 UP Equal Equal
#26 D Equal Equal
#27 Equal Equal Equal
Now as far as I understood you, you want only those rows where UP
and D
are not both present. To do this, you could use apply
to check in each row the appearance of UP
and D
and then select the correct rows.
#create a new column "check" and set 1 if "UP" AND "D" are present in row
dd$check <- apply(dd, 1, function(x) ifelse("UP" %in% x & "D" %in% x, 1 , 0))
The result is then:
> dd
# x1 x2 x3 check
#1 UP UP UP 0
#2 D UP UP 1
#3 Equal UP UP 0
#4 UP D UP 1
#5 D D UP 1
#6 Equal D UP 1
#7 UP Equal UP 0
#8 D Equal UP 1
#9 Equal Equal UP 0
#10 UP UP D 1
#11 D UP D 1
#12 Equal UP D 1
#13 UP D D 1
#14 D D D 0
#15 Equal D D 0
#16 UP Equal D 1
#17 D Equal D 0
#18 Equal Equal D 0
#19 UP UP Equal 0
#20 D UP Equal 1
#21 Equal UP Equal 0
#22 UP D Equal 1
#23 D D Equal 0
#24 Equal D Equal 0
#25 UP Equal Equal 0
#26 D Equal Equal 0
#27 Equal Equal Equal 0
Now you can select all rows where check
is 0.
dd <- dd[dd$check == 0,]
dd
# x1 x2 x3 check
#1 UP UP UP 0
#3 Equal UP UP 0
#7 UP Equal UP 0
#9 Equal Equal UP 0
#14 D D D 0
#15 Equal D D 0
#17 D Equal D 0
#18 Equal Equal D 0
#19 UP UP Equal 0
#21 Equal UP Equal 0
#23 D D Equal 0
#24 Equal D Equal 0
#25 UP Equal Equal 0
#26 D Equal Equal 0
#27 Equal Equal Equal 0
Of course you can delete the extra column (already in the previous subsetting) or now:
dd <- dd[, -4]
Is that what you were after?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.