如何在R中的(多个)子组中对行进行采样而不进行替换

时间:2018-12-11 18:18:51

标签: r random dplyr permutation

我有一个随机/抽样问题,无法解决。假设我想在实验中创建一个随机的顺序来表示刺激,其中包含两个变量,颜色和项目,每个变量具有三个级别。

library(dplyr)
set.seed(42)

participant_id <- 1:12
colour <- c("blue", "green", "red")
item <- c("apple", "banana", "pear")

我希望每个参与者以随机的顺序在列表中看到颜色和项目的随机配对,但从来没有一次看到任何单个值。

我可以看下面的代码-每个参与者以随机顺序看到每种颜色一次-但不知道如何确保与每种颜色配对的项目也可以不重复出现。

# dataframe of all possible combinations
all_permutations <- crossing(participant_id, colour, item) 

my_list <- all_permutations %>%
  group_by(participant_id, colour) %>%
  # randomly sample one row of item, per colour and participant  
  sample_n(1) %>% 
  group_by(participant_id) %>% 
  # randomly re-order within grouping
  sample_frac()

head(my_list, 15) 

# A tibble: 15 x 3
# Groups:   participant_id [5]
   participant_id colour item  
            <int> <chr>  <chr> 
 1              1 blue   pear  
 2              1 red    apple 
 3              1 green  pear  
 4              2 green  banana
 5              2 blue   pear  
 6              2 red    banana
 7              3 blue   pear  
 8              3 green  apple 
 9              3 red    banana
10              4 red    pear  
11              4 green  banana
12              4 blue   pear  
13              5 red    banana
14              5 green  apple 
15              5 blue   pear  

任何建议,我们将不胜感激!提前致谢。

1 个答案:

答案 0 :(得分:1)

这是基本的R解决方案。如果只想对向量的所有元素进行一次采样,则只需ES6,它将返回sample(vec)的排列。

vec