r中具有排序逻辑的操作向量

问题描述

我有一个id向量ids一个分组变量group一个因子变量factor,它的_中的初始数字在ids之前变量。

ids <- c("54_a","54_b","44_a","44_c")
 group <- c(1,2)
  factor <- c(54,44)

因此,54_a54_b属于第一个因子5444_a44_b属于第二个因素44

写出输出的规则是:

  1. id属于第一个因子时,fixed[#]应该是 fixed[1]
  2. id属于第二个因素fixed[#]时 应该是fixed[2]
  3. 对第1组和第2组(G1,G2)重复该过程。
(G1,54_a,fixed[1]) = 1.0; # 1 for factor 1
(G1,54_b,44_a,fixed[2]) = 1.0; # 1 for factor 2
(G1,44_c,fixed[2]) = 1.0; # 1 for factor 2
(G2,fixed[1]) = 1.0; # 1 for factor 1
(G2,fixed[2]) = 1.0; # 1 for factor 2
(G2,fixed[2]) = 1.0; # 1 for factor 2

有什么想法吗? 谢谢!

这是此post的简单版本。

解决方法

这是使用outer的一种方法:

c(t(outer(paste0('G',group),ids,function(x,y) {
  ind <- match(sub('_.*','',y),factor)
  sprintf('(%s,%s,fixed[%s]) = 1.0',x,y,ind)
})))

#[1] "(G1,54_a,fixed[1]) = 1.0" "(G1,54_b,fixed[1]) = 1.0"
#[3] "(G1,44_a,fixed[2]) = 1.0" "(G1,44_c,fixed[2]) = 1.0"
#[5] "(G2,fixed[1]) = 1.0" "(G2,fixed[1]) = 1.0"
#[7] "(G2,fixed[2]) = 1.0" "(G2,fixed[2]) = 1.0"

我们在函数中传递id和组,在match的部分传递id,以获得fixed#