我试图根据xy中的交互项将zy向量与z向量合并到z中的项。然后将最终代码更改为Q1,Q2 ... Q1 * Q2
我有两个向量需要匹配为向量xy:
x<-c(1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,6,6,9,10,16,21)
y<-c(1,2,3,5,6,8,18,1,2,5,6,7,8,12,15,16,11,17,18,19,20,21)
对于z的任何情况,我希望将2 * 6或6 * 11中的任何一个添加到向量z,因为根据向量xy,根据向量z在2,6,11之间存在相互作用
xy=paste0(x,"*",y,collapse=",")
xy
# [1] #"1*1,1*2,1*3,1*5,1*6,1*8,1*18,2*1,2*2,2*5,2*6,2*7,3*8,3*12,3*15,4*16,6*11,6*17,#9*18,10*19,16*20,21*21"
z<-c(2,6,11)
z
#[1] 2 6 11
我希望第四个向量能够从向量xy中获得z的所有相互作用并组合成一个新的向量xyz
xyz<-print("2+6+11+2*6+6*11")
#[1] "2+6+11+2*6+2*11+6*11"
xyz
#[1] "2+6+11+2*6+2*11+6*11"
然后每个可变的2,6,11转换为Q1,Q2,Q3所以最终产品看起来像......
xyz<-print("Q1+Q2+Q3+Q1*Q2+Q2*Q3")
#[1]
#End result:
#"Q1+Q2+Q3+Q1*Q2+Q2*Q3"
答案 0 :(得分:0)
只需循环浏览x/y
并添加互动(如果它们是z
的元素:
x <- c(1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,6,6,9,10,16,21)
y <- c(1,2,3,5,6,8,18,1,2,5,6,7,8,12,15,16,11,17,18,19,20,21)
z <- c(2,6,11)
xyz <- as.character(z)
for(i in 1:length(x)){
if(x[i] %in% z & y[i] %in% z & x[i] != y[i]){
xyz <- c(xyz, (paste0(x[i], "*", y[i])))
}
}
xyz <- paste(xyz, collapse = "+")
然后用您定义的任何编码替换这些数字:
z_map <- c("Q1", "Q2", "Q3")
for(i in 1:length(z)){
xyz <- gsub(z[i], z_map[i], xyz)
}