![](/img/trans.png)
[英]Given an R dataframe with column A, how do I create two new columns containing all ordered combinations of A
[英]How do I split a vector into two columns to create ordered pairs for random assignment
我试图从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
关于如何从向量到有序对的思考或想法? 任何帮助或见解将不胜感激。
- 托马斯
这可能很简单
newpairs <- matrix(pairs, ncol=2, byrow=TRUE)
然后每一行给你一对。
编辑正确使用matrix()
将矢量拆分为矩阵并迭代结果的行和列。 矩阵呈现为二维数组。 因此,您需要在此矩阵中将向量元素中的第一个元素设置为向量中的奇数位置,并将行中的第二个元素设置为向量中的偶数位置。 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和想法很清楚。
或者,如果你想要一个数据框:
df = data.frame(partner1=pairs[1:(length(pairs)/2)],
partner2=pairs[((length(pairs)/2)+1):length(pairs)])
您也可以将上面的Dirk代码压缩成一行
pairs <- matrix(sample(1:34,34,replace=F), ncol=2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.