问题描述
我有一个id向量ids
,一个分组变量group
和一个因子变量factor
,它的_
中的初始数字在ids
之前变量。
ids <- c("54_a","54_b","44_a","44_c")
group <- c(1,2)
factor <- c(54,44)
因此,54_a
和54_b
属于第一个因子54
。 44_a
和44_b
属于第二个因素44
。
写出输出的规则是:
- 当
id
属于第一个因子时,fixed[#]
应该是fixed[1]
。 - 当
id
属于第二个因素fixed[#]
时 应该是fixed[2]
。 - 对第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#
。