【问题标题】:Permutation test for paired data using a for loop使用 for 循环对配对数据进行排列测试
【发布时间】:2020-12-13 14:48:24
【问题描述】:

我想使用 for 循环置换配对的数据。我想在这种情况下我应该随机翻转我的一些对,但我不知道如何准确地做到这一点。我已经在网上搜索了这个,我找到了排列这种数据的方法,但是我没有找到这种方法。我认为我应该做的一个例子:

示例数据集:

   day1   day2
 1  5.5   1.5  
 2  2.5   6.5  
 3  7.5   8.5  
 4  4.5   1.5  
 5  5.5   1.5  

我希望它随机交换一些行,例如:

   day1   day2
 1  5.5   1.5  
 2  6.5   2.5 
 3  7.5   8.5  
 4  1.5   4.5  
 5  5.5   1.5  

我尝试过使用 sample() 命令,但这似乎交换了整行而不是只交换其中的一些。那么如何随机交换其中一些呢?

【问题讨论】:

    标签: r permutation


    【解决方案1】:

    如果您想随机交换某些行的列,请尝试:

    set.seed(6781)
    replace_inds <- sample(c(TRUE, FALSE), nrow(df), replace = TRUE)
    df[replace_inds, ] <- df[replace_inds, 2:1]
    df
    
    #  day1 day2
    #1  5.5  1.5
    #2  2.5  6.5
    #3  8.5  7.5
    #4  4.5  1.5
    #5  1.5  5.5
    

    数据

    df <- structure(list(day1 = c(5.5, 2.5, 7.5, 4.5, 5.5), day2 = c(1.5, 
    6.5, 8.5, 1.5, 1.5)), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

      【解决方案2】:

      这是一个单行选项,它将随机播放第一列和第二列中的元素。如果有几列要交换,它也可以工作:

      setNames(as.data.frame(t(apply(df, 1, sample))), names(df))
      #>   day1 day2
      #> 1  1.5  5.5
      #> 2  2.5  6.5
      #> 3  8.5  7.5
      #> 4  4.5  1.5
      #> 5  5.5  1.5
      

      【讨论】:

        【解决方案3】:

        我们可以从purrr使用pmap

        library(dplyr)
        library(purrr)
        df %>%
           pmap_dfr(~ sample(c(...)))
        

        -输出

        # A tibble: 5 x 2
        #   day2  day1
        #  <dbl> <dbl>
        #1   1.5   5.5
        #2   6.5   2.5
        #3   8.5   7.5
        #4   1.5   4.5
        #5   1.5   5.5
        

        数据

        df <- structure(list(day1 = c(5.5, 2.5, 7.5, 4.5, 5.5), day2 = c(1.5, 
        6.5, 8.5, 1.5, 1.5)), class = "data.frame", row.names = c(NA, 
        -5L))
        

        【讨论】:

          猜你喜欢
          • 2018-08-23
          • 2022-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-22
          • 2019-03-14
          • 2018-05-14
          • 1970-01-01
          相关资源
          最近更新 更多