Обычным способом выборки / разделения данных в R является использование sample
, например, для номеров строк.Например:
require(data.table)
set.seed(1)
population <- as.character(1e5:(1e6-1)) # some made up ID names
N <- 1e4 # sample size
sample1 <- data.table(id = sort(sample(population, N))) # randomly sample N ids
test <- sample(N-1, N/2, replace = F)
test1 <- sample1[test, .(id)]
Проблема в том, что это не очень устойчиво к изменениям данных.Например, если мы отбросим только одно наблюдение:
sample2 <- sample1[-sample(N, 1)]
образцы 1 и 2 по-прежнему практически идентичны:
nrow(merge(sample1, sample2))
[1] 9999
И все жеРазделение строк дает очень разные тестовые наборы, хотя мы установили начальное число:
test2 <- sample2[test, .(id)]
nrow(test1)
[1] 5000
nrow(merge(test1, test2))
[1] 2653
OneМожно было бы выбрать конкретные идентификаторы, но это не было бы надежно, если наблюдения опущены или добавлены.
Какой способ сделать разделение более устойчивым к изменениям данных?А именно, есть ли назначение для проверки неизмененных на неизмененные наблюдения, не назначать отброшенные наблюдения и переназначать новые наблюдения?