2016-05-05 11 views
0

データセットのうち同じサイズの4つの異なるサンプルを取得するための正しいRコードの作成に問題があります。データを同じサイズの別個のサンプルに分割するRコード

あなたの助けが必要です。このアプローチについてどのように

おかげで、よろしく、 Reelina

+1

小さな再生可能な例と期待される出力を表示してください – akrun

答えて

0

# Create data for example 
x <- data.frame(id = 1:100, y = rnorm(100), z = rnorm(100)) 

# Returns a list with four equally sized distinct samples of the data 
lapply(split(sample(nrow(x)), ceiling((1:nrow(x))/25)), function(i) x[i, ]) 
+0

ありがとうございました – Reelina

0

一つはカットコマンドを使用することができます。

x<-1:100 
cutindex<-cut(x, breaks=4) 

をカットポイントの名前を変更するには、「レベル」のコマンドを使用します。データがカットされたら

levels(cutindex)<-c("A", "B", "C", "D") 

を、私はお勧めしますdplyrパッケージのgroup_byコマンドを使用して追加の分析を行います。

+0

ありがとうございました... – Reelina

1

本当にここで試してみたいことがあなたの目標であるかによって異なります。私は、各サブセットがデータのランダムにサンプリングされた四半期である、等しいサイズの4つのサブセットを作成するデータフレームがあると仮定しようとしています。

私はデモのために、基数Rに含まれるデータをSeatbeltsにしました。これは、4の倍数の行数を持つためです。このソリューションでは、ベースR関数のみを使用します。より複雑なデータフレーム操作については、dplyrパッケージを見ることをお勧めします。

# use seat belts data as example as it has nrow(x) %% 4 == 0 
data(Seatbelts) 
# generate a random sample of numbers 1:4 such that each occurs equally 
ind = sample(rep(1:4,each = nrow(Seatbelts)/4)) 
# you could add that as a column to your data frame allowing the groups to be 
# specified in formulae etc 
# or if you want the four subsets 
lapply(split(1:nrow(Seatbelts),ind), function(i) Seatbelts[i,]) 

データがベクトルであれば、これはあなたがランダムサンプリングをしたくない場合は、単に

同じ方法で
ind = rep(1:4,each = length(x)/4) 

とスプリットとしてindを作成

x = runif(24) 
ind = sample(rep(1:4,each = length(x)/4)) 
split(x,ind) 

簡単です従来通り。

cutのようなものを使用することには注意が必要です。これは、同じサイズの4つのサブセットを必要としないためです。

table(as.numeric(cut(x,4))) 

# 1 2 3 4 
# 7 6 3 8 

cutはそれの長さではなく、間隔にxの範囲をカットするためです。

+0

ありがとうございました。それは非常に役に立ちました.. – Reelina

+0

あなたの問題を解決すれば問題はありません。将来の調査者が解決したことを確認できるように答えを受け入れるべきです。 'caret :: createFolds'という外部パッケージを使いたい場合は、上記のすべての余分なものを指定することを心配することなく、単一の関数呼び出しと同じ仕事をすることができます。 – jamieRowen

関連する問題