在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]