Как случайным образом разбить фрейм данных на половинки, сбалансированные по предмету и предмету - PullRequest
2 голосов
/ 03 февраля 2020

Следующий случайным образом разбивает кадр данных на две части.

df <- read.csv("https://raw.githubusercontent.com/HirokiYamamoto2531/data/master/data.csv")

head(df, 3)
#   dv   iv subject item
#1 562 -0.5       1    7
#2 790  0.5       1   21
#3  NA -0.5       1   19

r <- seq_len(nrow(df))

first <- sample(r, 240)
second <- r[!r %in% first]

df_1 <- df[first, ]
df_2 <- df[second, ]

Однако, таким образом, каждый кадр данных (df_1 и df_2) не сбалансирован по предмету и элементу: например,

table(df_1$subject)

# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
# 7  8  3  5  5  3  8  1  5  7  7  6  7  7  9  8  8  9  6  7  8  5  4  4  5  2  7  6  9 

# 30 31 32 33 34 35 36 37 38 39 40 
# 7  5  7  7  7  3  5  7  5  3  8 

table(df_1$item)

# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
# 12 11 12 12 9 11 11  8 11 12 10  8 14  7 14 10  8  7  9  9  7 11  9  8 

# There are 40 subjects and 24 items, and each subject is assigned to 12 items and each item to 20 subjects.

Я хотел бы знать, как разбить фрейм данных на две половины, которые сбалансированы по предмету и предмету (т.е. ровно 6 точек данных от каждого предмета и 10 точек данных от каждого предмета).

1 Ответ

0 голосов
/ 03 февраля 2020

Вы можете использовать функцию createDataPartition из пакета caret для создания сбалансированного раздела одной переменной.

Приведенный ниже код создает сбалансированный раздел набора данных в соответствии с переменной subject:

df <- read.csv("https://raw.githubusercontent.com/HirokiYamamoto2531/data/master/data.csv")

partition <- caret::createDataPartition(df$subject, p = 0.5, list = FALSE)
first.half <- df[partition, ]
second.half <- df[-partition, ]

table(first.half$subject)
table(second.half$subject)

Я не уверен, возможно ли сбалансировать две переменные одновременно. Вы можете попробовать сбалансировать одну переменную и проверить, довольны ли вы разделом второй переменной.

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