从一组数据帧中随机抽样

时间:2017-01-17 08:37:40

标签: r dplyr

我已根据各种条件创建了多个数据帧。现在我想对不同的数据帧进行采样,但是我想在采样后删除它们。我试过dplyrs sample_n:

sample_n(df, 4)

问题是这不会删除行,我是否需要一些递归循环,一旦它们被采样就会删除它们?或者是否有一些方便的功能可以帮助我?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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