2017-01-17 18 views
-3

さまざまな条件に基づいて複数のデータフレームを作成しました。今では、さまざまなデータフレームをサンプルしたいと思いますが、サンプリングしたラインを削除したいと考えています。私はdplyrs sample_nを試してみました:データフレームの配列から無作為にサンプリングする

sample_n(df, 4) 

問題は、この行を削除していないということです、私は彼らがサンプリングされた後の行を削除しますいくつかの再帰ループが必要でしょうか?または、私を助けることができる便利な機能がありますか?

+0

小さな再現性の例を提供し、期待される出力 – akrun

+1

くださいtidyverseアプローチのための 'modelr'パッケージを見てください。 – 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_along(xy)'ではなく 'seq_len(length(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 
関連する問題