如何将矢量拆分为两列以创建随机分配的有序对

时间:2010-07-09 11:31:40

标签: r vector split sample

我正在尝试从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

关于如何从向量到有序对的思考或想法?任何帮助或见解将不胜感激。

-Thomas

4 个答案:

答案 0 :(得分:12)

这可能就像

一样简单
 newpairs <- matrix(pairs, ncol=2, byrow=TRUE)

然后每一行都会给你一对。

编辑正确使用matrix()

答案 1 :(得分: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];
            }
        }

上面的代码没有经过测试,但是algorythm和想法很明确。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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