cp1412
cp1412

Reputation: 3

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.

Upvotes: 0

Views: 337

Answers (1)

Samuel Calderon
Samuel Calderon

Reputation: 741

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)

Upvotes: 1

Related Questions