我有一个这样的数据框:
Tem Time
10a 1
10a 2
10a 3
10a 4
20a 1
20a 2
20a 3
20a 4
10b 1
10b 2
10b 3
10b 4
20b 1
20b 2
20b 3
20b 4
现在我想做随机化以减少像这样的实验错误
Tem Time
10a 1
10a 2
10a 3
10a 4
20a 4 #( not the same sequence for Time in 10a)
20a 2
20a 3
20a 1
#(for b, not same sequence for a in Tem)
20b 3
20b 1
20b 2
20b 4
10b 1 #(not the same sequence for Time in 20b)
10b 3
10b 2
10b 4
最后,我需要将所有12个样本随机化。 我知道这很复杂。你能帮我做这个还是给我一些提示?提前致谢!
答案 0 :(得分:1)
Tem
内随机化:您可以使用tidyverse
方法在群组中随机抽样(只有您再次对整个数据集进行抽样):
library(tidyverse)
df <- data.frame(Tem = c("a", "b", "c"), Time = rep(1:4, 3)) %>% arrange(Tem, Time)
df %>% group_by(Tem) %>% sample_frac(1)
# A tibble: 12 x 2
# Groups: Tem [3]
Tem Time
<fctr> <int>
1 a 4
2 a 1
3 a 2
4 a 3
5 b 4
6 b 2
7 b 3
8 b 1
9 c 3
10 c 2
11 c 4
12 c 1
Tem
以及Time
df %>% group_by(Tem) %>% sample_frac(1) %>%
split(df$Tem) %>% { .[sample(names(.), length(names(.)))] } %>%
bind_rows()
# A tibble: 12 x 2
# Groups: tem [3]
tem time
<fctr> <int>
1 c 2
2 c 1
3 c 4
4 c 3
5 b 4
6 b 1
7 b 2
8 b 3
9 a 1
10 a 2
11 a 4
12 a 3
(这个样本在Tem
样本中与第一个样本相同,但随后将其拆分为由Tem
定义的列表并重新对样本进行采样,然后将它们全部绑定在一起。(这可能不是最佳解决方案。)