Давайте сделаем некоторые воспроизводимые данные.
set.seed(2020)
zipcode <- sample.int(10000:99999, size = 149130, replace = TRUE)
zipcode <- stringr::str_pad(as.character(zipcode), width = 5, pad = "0")
custname <- sample(letters, size = 149130, replace = TRUE)
customers <- data.frame(zipcode = zipcode, custname = custname)
str(customers)
#> 'data.frame': 149130 obs. of 2 variables:
#> $ zipcode : chr "09628" "09452" "07767" "08920" ...
#> $ custname: chr "k" "y" "n" "a" ...
Тогда позвольте caret
сделать всю тяжелую работу. Он добавляет столбец, который затем можно использовать для разделения одного фрейма данных на 2. Я head
результаты, но человеческий осмотр показывает, что вы получили как можно ближе к 50/50
customers$whichsample <- caret::createFolds(factor(customers$zipcode),
k = 2,
list = FALSE )
head(table(customers$zipcode, customers$whichsample))
#>
#> 1 2
#> 00001 8 7
#> 00002 4 5
#> 00003 8 7
#> 00004 7 6
#> 00005 7 8
#> 00006 11 11
Последующий запрос покажите, как разделить на два отдельных фрейма данных. Безопасный и медленный tidy
метод, предполагающий, что вы хотите csample1
и csample2
csample1 <- customers %>% filter(whichsample == 1)
csample2 <- customers %>% filter(whichsample == 2)
Создано 06.05.2020 с помощью пакета (v0.3.0 )