Как вы случайным образом распределяете данные на контрольные и лечебные группы одинакового размера в R? - PullRequest
0 голосов
/ 24 февраля 2020
set.seed(31)
resample(1:534, 90, replace = FALSE)

df.orig <- read.csv("project1data.csv")

df.groups <- filter(df.orig, participate == "y")
str(df.groups)

Я случайно выбрал 90 номеров домов из 534 и указал, хотят ли они участвовать в исследовании, в листе Excel, а затем отфильтровал людей, которые не хотели участвовать в исследовании. Как мне теперь случайным образом распределить участников на две группы одинакового размера (контроль и лечение)

1 Ответ

2 голосов
/ 24 февраля 2020

Вы не предоставили данные или код для запуска, поэтому я сгенерирую некоторый код, чтобы показать идею

set.seed(31)
# Create dataset with three variables
# Participate are the ones that we wish to include in the study. 
# You have those in your excel file.

fakedata <- data.frame(houseid=1:534, 
                       size=rbinom(534, size=5, prob=.5),
                       participate=sample(c("y", "n"), size=534, replace=TRUE))

, которая производит

head(fakedata)
  houseid size participate
1       1    3           y
2       2    4           n
3       3    2           n
4       4    2           y
5       5    4           y
6       6    2           n

Теперь мы можем использовать tidyverse для генерации случайной перестановки наблюдений / контролей. Сначала мы создаем вектор правильной длины (используя rep с длиной), а затем перетасовываем их, используя sample.

library("tidyverse")
fakedata %>%  # Take data
  filter(participate=="y") %>% 
  mutate(group=sample(rep(c("Case", "Ctrl"), length=n())))

Это дает

    houseid size participate group
1         1    3           y  Case
2         4    2           y  Case
3         5    4           y  Ctrl
4         7    4           y  Case
5         8    1           y  Case
6         9    4           y  Ctrl
7        13    3           y  Case
8        16    1           y  Ctrl
.
.
.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...