用数字创建一个向量"合作"与另一个向量中的其他数字

时间:2016-07-26 21:22:48

标签: r vector

我有5个向量,其中2个我考虑"配对,"意思是它们具有相同数量的元素,并且每个向量中的相应元素彼此相符(在我的例子中,我为不同的Beta分布指定了alphas和beta)。我想制作一个矩阵,其中包含三个不成对向量的元素和其他两个向量中元素对的所有组合。我认为这样做的方法是将来自该对的一个向量的元素与其他三个非成对向量组合,然后将左对出的成对向量的元素与其伙伴匹配。我已经制作了这些组合,但我正在努力做第二部分 - 在组合完成后将元素配对。这是我的第一部分代码:

l <- list(alpha=c(8.572, 20, 23.333, 45), n=c(10, 20, 40), numc=c(2, 3, 5), numq=c(5, 10, 20))  
combo <- expand.grid(l)
beta <- c(20, 20, 10, 5)

&#34; combo&#34;的前几行。对象看起来像这样:

    alpha  n numc numq
1  8.572 10    2    5
2 20.000 10    2    5
3 23.333 10    2    5
4 45.000 10    2    5
5  8.572 20    2    5
6 20.000 20    2    5

现在我想在这个名为&#34; beta&#34;的数据框中插入一个向量。它将每个alpha值(索引1到4)与来自我指定的β矢量的相应β值配对。因此,例如,每当alpha为8.572时,beta为20.我该怎么做?

1 个答案:

答案 0 :(得分:-1)

我认为你想要的是

alpha <- factor(combo$alpha)
beta <- factor(beta)
combo$beta <- beta[alpha]

如果你能使用因子水平,不确定为什么你需要匹配?例如,假设您随机置换了alpha。

sa <- sample(alpha)
combo$beta <- beta[sa]

这应该仍然是正确的。

在您发表评论后,@ David Arenburg:

l <- list(alpha=c(23.333, 20, 45, 8.572), 
     n=c(10, 20, 40), numc=c(2, 3, 5), numq=c(5, 10, 20)) 
combo <- expand.grid(l)
beta <- factor(c(20, 20, 10, 5))
alpha <- factor(combo$alpha)
combo$beta <- beta[alpha]

这还不是OP想要的吗?

 head(combo)
   alpha  n numc numq beta
1 23.333 10    2    5   10
2 20.000 10    2    5   20
3 45.000 10    2    5    5
4  8.572 10    2    5   20
5 23.333 20    2    5   10
6 20.000 20    2    5   20

您可以考虑是否要将一个数字向量中的第n个元素映射到某个因子,即将数字向量视为有序因子。这样,您可以指定顺序,并且它不会取决于您的初始测试顺序。

在这里,我改变了beta的顺序,我提供了有序因子alpha的等级,这是根据你的原始订单指定的。

l <- list(alpha=c(23.333, 20, 45, 8.572), 
     n=c(10, 20, 40), numc=c(2, 3, 5), numq=c(5, 10, 20)) 
combo <- expand.grid(l)
beta <- factor(c(20, 10, 20, 5))
alpha <- as.ordered(factor(combo$alpha, 
                           levels = c(8.572, 20, 23.333, 45)))
combo$beta <- beta[alpha] 

您将注意到alpha级别的第n个元素已映射到beta的第n个元素,正如您最初想要的那样。

如果没有,我建议您使用match