Генерация данных:
set.seed(100)
train <- data.frame(stream = factor(sample(x= 0:1, size = 100, replace = TRUE,
prob = c(0.25,.75))), HUC12 = rep(c("a","b","c","d")))
Попробуйте что-то подобное, потому что ваш downSample возвращает data.frame, мы можем использовать функцию do
в dplyr для выполнения понижающей выборки.
library(dplyr)
down_train <- train %>% select(stream, HUC12) %>%
na.omit() %>% group_by(HUC12) %>% do(downSample(.,.$stream))
Мы можем проверить:
down_train %>% count(HUC12,stream)
# A tibble: 8 x 3
# Groups: HUC12 [4]
HUC12 stream n
<fct> <fct> <int>
1 a 0 1
2 a 1 1
3 b 0 4
4 b 1 4
5 c 0 11
6 c 1 11
7 d 0 8
8 d 1 8
И в исходных данных:
train %>% count(HUC12,stream)
# A tibble: 8 x 3
HUC12 stream n
<fct> <fct> <int>
1 a 0 1
2 a 1 24
3 b 0 4
4 b 1 21
5 c 0 11
6 c 1 14
7 d 0 8
8 d 1 17