【问题标题】:Randomization of pairs and ordering in RR中的对随机化和排序
【发布时间】:2016-09-07 14:05:02
【问题描述】:

恐怕我找不到这个问题的答案,所以我需要你的专业知识。

我需要在 R 中随机化一组数据,其中数据集是成对的选择集(这里用字母表示);但是,我还需要对每个集合随机化优先顺序(先行)。此外,我需要包括一个阴性对照 (XX)。它看起来像这样:

(1) X A or A X

(2) X B or B X

(3) X C or C X

(4) X D or D X

(5) X E or E X

(6) XX

我可以很容易地使用sample(1:6, 4) 随机化 1-6,但我也不知道如何为配对顺序添加随机化。任何想法都很棒!

【问题讨论】:

    标签: r random statistics


    【解决方案1】:

    如果我明白的话;你有 LETTERS[1:5]LETTERS[24] (X) 你从两次抽样,随机排序。应该这样做;

    c(sample(LETTERS[c(1:5, 24)], 1), LETTERS[24])[sample(2)]
    

    分解;

    c(                               ## combination of
    sample(LETTERS[c(1:5, 24)], 1),  ## A:E, X, sampled once
    LETTERS[24])                     ## and X
    [sample(2)]                      ## re-sampled
    

    例如

    set.seed(1337)
    [1] "X" "D"
    

    一些可能结果的列表;

    set.seed(1337)
    replicate(10, c(sample(LETTERS[c(1:5, 24)], 1), LETTERS[24])[sample(2)])
        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    [1,] "X"  "C"  "X"  "X"  "E"  "X"  "C"  "E"  "X"  "X"  
    [2,] "D"  "X"  "X"  "A"  "X"  "A"  "X"  "X"  "D"  "X"  
    

    【讨论】:

    • Jonathan,您的输出未显示任何“X”/“B”组合。是否有一种变体在重复之前强制所有 6 种组合?
    • 这不是随机的。将复制设置得更高(例如,使用相同种子的 100 次),您会在 12、14、50、52、64、80、84、85 和 89 次重复中得到“X”/“B”。
    • 是的,你是对的。我正在“阅读”这个问题,认为 Elise 正在随机化一份问卷和回答,或者类似的东西。 (无论如何,我从你的回答中学到了一些东西......整洁。)
    【解决方案2】:

    假设您的原始数据集如下所示:

    li
    [[1]]
    [1] "X" "A"
    
    [[2]]
    [1] "X" "B"
    
    [[3]]
    [1] "X" "C"
    
    [[4]]
    [1] "X" "D"
    
    [[5]]
    [1] "X" "E"
    
    [[6]]
    [1] "X" "X"
    

    您可以在列表级别和每对级别将其随机化,如下所示:

    lapply(li, function(pair) pair[sample(1:2)])[sample(1:6)]
    [[1]]
    [1] "X" "D"
    
    [[2]]
    [1] "B" "X"
    
    [[3]]
    [1] "E" "X"
    
    [[4]]
    [1] "X" "X"
    
    [[5]]
    [1] "X" "A"
    
    [[6]]
    [1] "C" "X"
    

    【讨论】:

    • 这太棒了!谢谢!!
    【解决方案3】:

    如果我理解了这个问题,以下内容有点粗鲁,但我相信可以回答您的问题

    s<- c("a","b","c","d","e","x")
    n<-6
    
    (x<-cbind(sample(s,n),rep("x",n)))
    
    for (i in 1:n) {
      if(sample(1:2,1)==2) {
        tmp<-x[i,1]
        x[i,1] <- x[i,2]
        x[i,2] <- tmp
      }   
    }
    x
    

    【讨论】:

    • Psidom 的解决方案比我刚刚发布的解决方案更高效。
    • 没关系,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多