在r中创建二元变量的所有可能组合

在r中创建二元变量的所有可能组合,r,combinations,R,Combinations,我有这个数据集 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_

我有这个数据集

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,例如,它有两种可能的变量组合。e、 x.Pos_emaO_dO_UP&Pos_emaO_dO_D。通常,如果D或UP之前的公式相同,且UP和D都在其中,则删除此组合。我尝试了一些独特的,但没有成功

注意:然后我想使用粘贴式粘贴组合,collapse=&并使用此粘贴组合来子集主表,然后使用subsetmain_表,粘贴的_组合并运行我所拥有的这个函数。这样行吗?
谢谢

我仍然不太确定我是否理解你,但请考虑这个例子。我们有3个变量x1,x2,x3,每个变量都可以是Up或D或相等。要计算3个变量的所有可能组合,可以使用expand.grid:

结果是:

> 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[, -4]

这就是你想要的吗?

我不知道你不想包括哪些组合,但你看过expand.grid吗?也许它对您有帮助。是的,我查看了expand.grid,但这不是我需要的。我有n个变量,可以是UP或D,或者上面的等值计算。我需要所有可能的组合,但组合中不可能有每个变量的UP和D,也不可能同时有UP和D。我需要进行这些组合,以使用它们对主表进行子集划分,以找到最佳可能的组合来评估dependen变量。清楚吗?我编辑的问题,可能更清楚。换句话说。我需要说唯一的函数来比较名称的一部分,而不使用UP或D。然后我将能够删除这些组合,它们的变量比其他组合少。谢谢,但还不是全部。这些都是在子集组合中包含3个变量的可能组合。我还需要2,3,4,5,n…的所有可能组合,其中n是变量数。这应该由库姆来做,但我不知道具体怎么做。但谢谢,这让我对这个问题有了不同的看法。
> 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
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]