Reputation: 3
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
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_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
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