rpermutationpermute

Permute one column 1000 times in r


I have a df with two columns, ID and a character variable with "Y" and "N". I want to permute the second column 1000 times and assign a value to identify each permutation set. My end goal is to create a null distribution with the permutations.

boot <- transform(boot, column2 = sample(column2)) 

I have got this to work to make one permutation but I have struggled to loop this 1000 times and assign a value for each permutation.This also creates a new df each time which seems inefficient but I am relatively new to R so any suggestions will be very helpful.


Solution

  • Using tidyverse functions you can achieve this. Let's say you want 4 permutations for each id. You can get them in "long" and "wide" format.

    library(tidyverse)
    

    Long

    long_format <- tibble(
        id = 1:1000,
        data = map(id, ~sample(c("Y", "N"), 4, replace = TRUE))
        ) %>%  
        unnest(data)
    
    long_format
    #> # A tibble: 4,000 x 2
    #>       id data 
    #>    <int> <chr>
    #>  1     1 N    
    #>  2     1 N    
    #>  3     1 Y    
    #>  4     1 Y    
    #>  5     2 Y    
    #>  6     2 N    
    #>  7     2 N    
    #>  8     2 N    
    #>  9     3 N    
    #> 10     3 Y    
    #> # ... with 3,990 more rows
    

    Wide

    Here we pass the ids as column names

    wide_format <- long_format %>% 
            pivot_wider(names_from = id, values_from = data, names_prefix = "p_") %>% 
            unnest(everything())
    
    wide_format
    #> # A tibble: 4 x 1,000
    #>   p_1   p_2   p_3   p_4   p_5   p_6   p_7   p_8   p_9   p_10  p_11  p_12  p_13 
    #>   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
    #> 1 N     Y     N     Y     N     Y     N     N     Y     N     N     Y     N    
    #> 2 N     N     Y     N     N     Y     Y     Y     N     N     N     N     N    
    #> 3 Y     N     N     Y     Y     Y     Y     Y     N     Y     Y     Y     Y    
    #> 4 Y     N     N     N     Y     Y     N     Y     N     Y     N     Y     Y    
    #> # ... with 987 more variables: p_14 <chr>, p_15 <chr>, p_16 <chr>, p_17 <chr>,
    #> #   p_18 <chr>, p_19 <chr>, p_20 <chr>, p_21 <chr>, p_22 <chr>, p_23 <chr>,
    #> #   p_24 <chr>, p_25 <chr>, p_26 <chr>, p_27 <chr>, p_28 <chr>, p_29 <chr>,
    #> #   p_30 <chr>, p_31 <chr>, p_32 <chr>, p_33 <chr>, p_34 <chr>, p_35 <chr>,
    #> #   p_36 <chr>, p_37 <chr>, p_38 <chr>, p_39 <chr>, p_40 <chr>, p_41 <chr>,
    #> #   p_42 <chr>, p_43 <chr>, p_44 <chr>, p_45 <chr>, p_46 <chr>, p_47 <chr>,
    #> #   p_48 <chr>, p_49 <chr>, p_50 <chr>, p_51 <chr>, p_52 <chr>, p_53 <chr>,
    #> #   p_54 <chr>, p_55 <chr>, p_56 <chr>, p_57 <chr>, p_58 <chr>, p_59 <chr>,
    #> #   p_60 <chr>, p_61 <chr>, p_62 <chr>, p_63 <chr>, p_64 <chr>, p_65 <chr>,
    #> #   p_66 <chr>, p_67 <chr>, p_68 <chr>, p_69 <chr>, p_70 <chr>, p_71 <chr>,
    #> #   p_72 <chr>, p_73 <chr>, p_74 <chr>, p_75 <chr>, p_76 <chr>, p_77 <chr>,
    #> #   p_78 <chr>, p_79 <chr>, p_80 <chr>, p_81 <chr>, p_82 <chr>, p_83 <chr>,
    #> #   p_84 <chr>, p_85 <chr>, p_86 <chr>, p_87 <chr>, p_88 <chr>, p_89 <chr>,
    #> #   p_90 <chr>, p_91 <chr>, p_92 <chr>, p_93 <chr>, p_94 <chr>, p_95 <chr>,
    #> #   p_96 <chr>, p_97 <chr>, p_98 <chr>, p_99 <chr>, p_100 <chr>, p_101 <chr>,
    #> #   p_102 <chr>, p_103 <chr>, p_104 <chr>, p_105 <chr>, p_106 <chr>,
    #> #   p_107 <chr>, p_108 <chr>, p_109 <chr>, p_110 <chr>, p_111 <chr>,
    #> #   p_112 <chr>, p_113 <chr>, ...
    

    Created on 2021-06-22 by the reprex package (v2.0.0)