2017-01-17 2 views
-3

Я создал несколько dataframes на основе различных условий. Теперь я хотел бы пробовать различные данные, но я хотел бы удалить строки после их выборки. Я попытался dplyrs sample_n:Сэмплирование случайным образом из массива dataframes

sample_n(df, 4) 

проблема заключается в том, что это не приводит к удалению строки, мне нужно некоторое рекурсивный цикл, который будет удалять строки, как только они опрашиваются? Или есть какая-то удобная функция, которая может мне помочь?

+0

Просьба представить небольшой воспроизводимый пример и ожидаемый результат – akrun

+1

Посмотрите на 'modelr' пакет для tidyverse подхода. – Axeman

+0

@akrun тот же вопрос не задавался. Я не просто хотел, чтобы образец данных был, я не должен повторять одни и те же данные снова, как только я пробую последующие времена. – Lowpar

ответ

6

Работы для меня.

# generate data 
a <- data.frame(letters = letters[1:5], var = rnorm(5)) 
b <- data.frame(letters = letters[6:10], var = rnorm(5)) 
c <- data.frame(letters = letters[11:15], var = rnorm(5)) 
xy <- list(a, b, c) 

set.seed(357) # set seed for reproducibility 
dfsample <- sample(seq_len(length(xy)), 1) # sample out one data.frame 

xy[[dfsample]] 

    letters   var 
1  a 1.51348192 
2  b -0.60657737 
3  c 0.51828252 
4  d -0.05352487 
5  e -1.34303266 

# remove random row, notice the minus sign in front of the sample 
xy[[dfsample]] <- xy[[dfsample]][-sample(1:nrow(xy[[dfsample]]), 1), ] 
xy[[dfsample]] 

    letters   var 
2  b -0.60657737 
3  c 0.51828252 
4  d -0.05352487 
5  e -1.34303266 
+0

Любая конкретная причина для 'seq_len (length (xy))' вместо 'seq_along (xy)'? – Axeman

+0

Отличный ответ, действительно, это может быть реализовано в рекурсивной функции, большое спасибо за вашу помощь! – Lowpar

+1

@Axeman Я редко обращаю внимание на эту часть, поэтому нет особых причин. –

0
modelr::crossv_mc(mtcars, 5, 0.5) 

создает 5 комплектов эксклюзивных расколов одинакового размера. Они хранятся в виде столбцов списка и используют класс resample, который эффективен с точки зрения памяти.

# A tibble: 5 × 3 
      train   test .id 
      <list>   <list> <chr> 
1 <S3: resample> <S3: resample>  1 
2 <S3: resample> <S3: resample>  2 
3 <S3: resample> <S3: resample>  3 
4 <S3: resample> <S3: resample>  4 
5 <S3: resample> <S3: resample>  5 
Смежные вопросы