如何将一个向量拆分成两列以创建有序对以进行随机分配

7
我正在尝试为一个实验从34个受试者中生成随机配对。受试者将被分配ID号1-34。为了生成随机排序的数字(1-34),我使用了以下代码:
  ### Getting a vector of random ordered numbers 1-34###
  pairs<-sample(1:34,34,replace=F)
  pairs
  [1] 16 22  8 13  4 25 18 12 17  5  6 31 29 27 30 23  2 14  9 24 34 21 11  
    3  1 28 33 20 32 26 19 10 15  7

我希望做的是将这些随机排列的数字拆分成每个向量的其他元素,并将其放入一列中,以便获得以下有序对:
   partner1     partner2
    16           22
     8           13
     .            .
     .            .
    15            7

有关如何从向量转换为有序对的想法或想法?任何帮助或见解都将不胜感激。

-托马斯


1
你可以通过使用sample(1:34)来达到和 sample(1:34,34,replace=F) 相同的效果。 - mbq
4个回答

15

那可能就像这样简单

 newpairs <- matrix(pairs, ncol=2, byrow=TRUE)

每一行都会给你一对。

编辑 正确做法是使用 matrix()


是的,对我来说也一样。矩阵也可以。谢谢Dirk和gd047! - Thomas

0

将向量分割为矩阵,并迭代结果的行和列。矩阵类似于二维数组。因此,您需要将向量中奇数位置的行元素的第一个元素设置为该矩阵中的元素,并将向量中偶数位置的行元素的第二个元素设置为该矩阵中的元素。 var vector = new byte[34]; //填充它

        var matrix = new byte[2,17]; //the code below will fill this matrix, then you need only to print it
        for (var i=0; i < vector.Length; i++)
        {
            var indexPosition = i + 1;
            if (indexPosition % 2 != 0) //odd number
            {
                matrix[0, i/2] = vector[i];
            }
            else //even number
            {
                matrix[1, i / 2] = vector[i];
            }
        }

上面的代码未经测试,但算法和思路是清晰的。


0

或者,如果你想要一个数据框:

df = data.frame(partner1=pairs[1:(length(pairs)/2)],
                partner2=pairs[((length(pairs)/2)+1):length(pairs)])

0

你也可以将Dirk上面的代码压缩成一行

pairs <- matrix(sample(1:34,34,replace=F), ncol=2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接