генерировать повторную случайную выборку - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать схему случайной выборки для экспериментов, которые я провожу этим летом. В этой схеме я делаю четыре экспериментальных испытания для каждого гнезда птицы в определенном возрасте на каждом участке. Испытания должны быть случайными для каждого гнезда, но все гнезда должны проходить все четыре разных испытания (т. Е. случайный порядок , а не случайный тип испытания).

Пока у меня есть: - вектор с двумя именами сайтов повторяется 80 раз - вектор с гнездами (20 потенциальных гнезд / сайт) повторяется 4 раза - вектор с возрастом (4 разных периода), повторенный 40 раз

sites <- c(rep("AU", times = 80), rep("WE", times = 80)) 
nest <- c(rep(1:20, each = 4), rep(1:20, each = 4))
age <- rep(c("3/4", "7/8", "11/12", "15/16"), times = 40)df <- 

data.frame(cbind(sites, nest, age))
head(df)

  sites nest   age
1    AU    1   3/4
2    AU    1   7/8
3    AU    1 11/12
4    AU    1 15/16
5    AU    2   3/4
6    AU    2   7/8

Для последней случайной выборки в каждом гнезде мне нужно выбрать испытания с 1 по 4. Я пробовал следующее:

trial <- rep(sample(1:4, 4, replace=FALSE), times = 40) #creates the same random order for each nest
trial <- rep(sample(1:4, 4, replace=FALSE), each = 40) #repeats the same number 40 times, before selecting the next one

Как мне это исправить?

Бонусные баллы, если вы можете помочь мне настроить это так, чтобы вместо всех испытаний в одном столбце он был настроен таким образом, чтобы каждое испытание находилось в отдельном столбце.

1 Ответ

1 голос
/ 15 мая 2019

Проблема генерирования другого заказа каждый раз решается с помощью replicate. Он не будет повторять одно и то же выражение, он будет вызывать выражение expr n раз.

set.seed(1234)    # Make the results reproducible
trials1 <- replicate(40, sample(4))

Чтобы испытания были представлены в виде столбцов, просто транспонируйте матрицу результатов.

trials2 <- t(trials1)
colnames(trials2) <- sprintf("trial_%02d", seq_len(ncol(trials2)))
...