使用 group_by 和样本在组内和组间随机化
Randomizing within and across groups using group_by and sample
我是 运行 一项研究,在这项研究中,每位参与者都会收到随机分配的两个不同级别的刺激:块内的块(3 个独特的块)和试验(每个块有 4 个独特的试验) .所以我试图通过以下方式创建一个带有预先随机化刺激呈现列表的数据框:
- 随机排列每个区块内的试验
- 随机排列参与者中的块。
--
df <- df %>%
group_by(id, block) %>%
mutate(trial = trial[sample(row_number())])
试验在区块(和参与者)内随机化,但我如何在参与者内随机化区块?
数据框如下所示:
id
block
trial
n1
b
1
n1
b
2
n1
b
3
n1
b
4
n1
p
1
n1
p
2
n1
p
3
n1
p
4
n1
s
1
n1
s
2
n1
s
3
n1
s
4
n2
b
1
n2
b
2
n2
b
3
n2
b
4
n2
p
1
n2
p
2
n2
p
3
n2
p
4
n2
s
1
n2
s
2
n2
s
3
n2
s
4
n3
b
1
n3
b
2
n3
b
3
n3
b
4
n3
p
1
n3
p
2
n3
p
3
n3
p
4
n3
s
1
n3
s
2
n3
s
3
n3
s
4
这样的事情怎么样:
dat <- structure(list(id = c("n1", "n1", "n1", "n1", "n1", "n1", "n1",
"n1", "n1", "n1", "n1", "n1", "n2", "n2", "n2", "n2", "n2", "n2",
"n2", "n2", "n2", "n2", "n2", "n2", "n3", "n3", "n3", "n3", "n3",
"n3", "n3", "n3", "n3", "n3", "n3", "n3"), block = c("b", "b",
"b", "b", "p", "p", "p", "p", "s", "s", "s", "s", "b", "b", "b",
"b", "p", "p", "p", "p", "s", "s", "s", "s", "b", "b", "b", "b",
"p", "p", "p", "p", "s", "s", "s", "s"), trial = c(1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L)), row.names = c(NA, 36L), class = "data.frame")
library(dplyr)
library(tidyr)
dat %>% group_by(id, block) %>%
summarise(trial = list(sample(trial, n(), replace=FALSE))) %>%
group_by(id) %>%
slice_sample(n=3) %>%
unnest(trial)
#> `summarise()` has grouped output by 'id'. You can override using the `.groups`
#> argument.
#> # A tibble: 36 × 3
#> # Groups: id [3]
#> id block trial
#> <chr> <chr> <int>
#> 1 n1 b 4
#> 2 n1 b 1
#> 3 n1 b 2
#> 4 n1 b 3
#> 5 n1 s 2
#> 6 n1 s 4
#> 7 n1 s 3
#> 8 n1 s 1
#> 9 n1 p 4
#> 10 n1 p 3
#> # … with 26 more rows
由 reprex package (v2.0.1)
创建于 2022-05-13
我是 运行 一项研究,在这项研究中,每位参与者都会收到随机分配的两个不同级别的刺激:块内的块(3 个独特的块)和试验(每个块有 4 个独特的试验) .所以我试图通过以下方式创建一个带有预先随机化刺激呈现列表的数据框:
- 随机排列每个区块内的试验
- 随机排列参与者中的块。
--
df <- df %>%
group_by(id, block) %>%
mutate(trial = trial[sample(row_number())])
试验在区块(和参与者)内随机化,但我如何在参与者内随机化区块?
数据框如下所示:
id |
block |
trial |
---|---|---|
n1 |
b |
1 |
n1 |
b |
2 |
n1 |
b |
3 |
n1 |
b |
4 |
n1 |
p |
1 |
n1 |
p |
2 |
n1 |
p |
3 |
n1 |
p |
4 |
n1 |
s |
1 |
n1 |
s |
2 |
n1 |
s |
3 |
n1 |
s |
4 |
n2 |
b |
1 |
n2 |
b |
2 |
n2 |
b |
3 |
n2 |
b |
4 |
n2 |
p |
1 |
n2 |
p |
2 |
n2 |
p |
3 |
n2 |
p |
4 |
n2 |
s |
1 |
n2 |
s |
2 |
n2 |
s |
3 |
n2 |
s |
4 |
n3 |
b |
1 |
n3 |
b |
2 |
n3 |
b |
3 |
n3 |
b |
4 |
n3 |
p |
1 |
n3 |
p |
2 |
n3 |
p |
3 |
n3 |
p |
4 |
n3 |
s |
1 |
n3 |
s |
2 |
n3 |
s |
3 |
n3 |
s |
4 |
这样的事情怎么样:
dat <- structure(list(id = c("n1", "n1", "n1", "n1", "n1", "n1", "n1",
"n1", "n1", "n1", "n1", "n1", "n2", "n2", "n2", "n2", "n2", "n2",
"n2", "n2", "n2", "n2", "n2", "n2", "n3", "n3", "n3", "n3", "n3",
"n3", "n3", "n3", "n3", "n3", "n3", "n3"), block = c("b", "b",
"b", "b", "p", "p", "p", "p", "s", "s", "s", "s", "b", "b", "b",
"b", "p", "p", "p", "p", "s", "s", "s", "s", "b", "b", "b", "b",
"p", "p", "p", "p", "s", "s", "s", "s"), trial = c(1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L)), row.names = c(NA, 36L), class = "data.frame")
library(dplyr)
library(tidyr)
dat %>% group_by(id, block) %>%
summarise(trial = list(sample(trial, n(), replace=FALSE))) %>%
group_by(id) %>%
slice_sample(n=3) %>%
unnest(trial)
#> `summarise()` has grouped output by 'id'. You can override using the `.groups`
#> argument.
#> # A tibble: 36 × 3
#> # Groups: id [3]
#> id block trial
#> <chr> <chr> <int>
#> 1 n1 b 4
#> 2 n1 b 1
#> 3 n1 b 2
#> 4 n1 b 3
#> 5 n1 s 2
#> 6 n1 s 4
#> 7 n1 s 3
#> 8 n1 s 1
#> 9 n1 p 4
#> 10 n1 p 3
#> # … with 26 more rows
由 reprex package (v2.0.1)
创建于 2022-05-13