首页 文章

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

提问于
浏览
0

我有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)

“组合”对象的前几行看起来像这样:

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

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

1 回答

  • -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初始排序 .

    在这里,我切换了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 .

相关问题