按顺序将ID分配给编号

时间:2014-05-06 12:35:07

标签: r sequence

我必须为各种程序员分配文章。每篇文章都应编码两次,没有一对编码人员可以完全一起工作。

我认为该方案应如下所示(test是我需要的例证):

art_id <- 1:21
coder1 <- c(1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
coder2 <- c(1,0,0,0,0,0,7,8,9,10,11,0,0,0,0,0,0,0,0,0,0)
coder3 <- c(0,2,0,0,0,0,0,0,0,0,0,12,13,14,15,0,0,0,0,0,0)
coder4 <- c(0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,16,17,18,0,0,0)
coder5 <- c(0,0,0,4,0,0,0,0,9,0,0,0,13,0,0,16,0,0,19,20,0)
coder6 <- c(0,0,0,0,5,0,0,0,0,10,0,0,0,14,0,0,17,0,19,0,21)
coder7 <- c(0,0,0,0,0,6,0,0,0,0,11,0,0,0,15,0,0,18,0,20,21)

test <- data.frame(art_id, coder1, coder2, coder3, coder4, coder5, coder6, coder7)

这显然可以更容易,但我的数学技能非常有限。是否有一种“简单”的方式以这种方式自动分配200篇文章? 请注意,art_id将是字符,而不是此插图中的数字。

感谢。

2 个答案:

答案 0 :(得分:1)

我同意Carl Witthoft的建议,并建议您使用combn功能。

这是我的尝试:

# Setup articles
articles <- paste("article_", seq(1:200))

# Setup unique coder probabilities 
coders <- paste0("coder_", seq(1:7))
unique.coder.combinations <- do.call(paste, c(data.frame(t(combn(coders, 2)))))

# Assignment
coder.selection <- cbind(articles, coders=sample(unique.coder.combinations, 200, replace=TRUE))

# head(coder.selection)
# > head(coder.selection)
#      articles     coders           
# [1,] "article_ 1" "coder_1 coder_5"
# [2,] "article_ 2" "coder_2 coder_4"
# [3,] "article_ 3" "coder_4 coder_6"
# [4,] "article_ 4" "coder_3 coder_7"
# [5,] "article_ 5" "coder_5 coder_7"
# [6,] "article_ 6" "coder_3 coder_4"

答案 1 :(得分:0)

不确定,但我认为朝着不同的方向去做。首先计算所有可能的“编码器配对”。

codepair <- combn(1:7,2)

然后将art_id值随机分配到codepair

中的列

请注意,对于给定数量的对象,您需要一定数量的编码器。