[英]Create all possible combinations of binomic variables in r
我有这个数据集
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)
和这个变量
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
或者
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))
编辑:我对此问题进行了编辑。 我需要删除这些组合(V1:Vn),例如,它们具有两种可能的变量组合。 例如Pos_emaO_dO_UP和Pos_emaO_dO_D。 通常,如果D或UP之前的公式相同并且两个(UP&D)都在其中,请删除此组合。 我尝试了一些独特的方法,但是没有成功。
注意:然后我要使用粘贴(如paste(combination,collapse =“&”))并使用此“粘贴”组合来对主表进行子集设置,然后再像subset(main_table,“ pasted_combination”)一样运行该槽低谷函数。 能行吗 谢谢
我仍然不确定我是否理解正确,请考虑以下示例。 我们有3个变量( x1
, x2
, x3
),每个变量可以是Up
或D
或Equal
。 要计算3个变量的所有可能组合,可以使用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
现在据我了解你,你要只在那些行UP
和D
不同时存在。 为此,您可以使用apply
检查每行UP
和D
的外观,然后选择正确的行。
#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))
结果是:
> 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
现在,您可以选择check
为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
当然,您可以删除多余的列(已经在上一个子设置中)或现在删除:
dd <- dd[, -4]
那是你的追求吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.