データセットのうち同じサイズの4つの異なるサンプルを取得するための正しいRコードの作成に問題があります。データを同じサイズの別個のサンプルに分割するRコード
あなたの助けが必要です。このアプローチについてどのように
おかげで、よろしく、 Reelina
データセットのうち同じサイズの4つの異なるサンプルを取得するための正しいRコードの作成に問題があります。データを同じサイズの別個のサンプルに分割するRコード
あなたの助けが必要です。このアプローチについてどのように
おかげで、よろしく、 Reelina
?
# 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, ])
ありがとうございました – Reelina
一つはカットコマンドを使用することができます。
x<-1:100
cutindex<-cut(x, breaks=4)
をカットポイントの名前を変更するには、「レベル」のコマンドを使用します。データがカットされたら
levels(cutindex)<-c("A", "B", "C", "D")
を、私はお勧めしますdplyrパッケージのgroup_byコマンドを使用して追加の分析を行います。
ありがとうございました... – Reelina
本当にここで試してみたいことがあなたの目標であるかによって異なります。私は、各サブセットがデータのランダムにサンプリングされた四半期である、等しいサイズの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の範囲をカットするためです。
ありがとうございました。それは非常に役に立ちました.. – Reelina
あなたの問題を解決すれば問題はありません。将来の調査者が解決したことを確認できるように答えを受け入れるべきです。 'caret :: createFolds'という外部パッケージを使いたい場合は、上記のすべての余分なものを指定することを心配することなく、単一の関数呼び出しと同じ仕事をすることができます。 – jamieRowen
小さな再生可能な例と期待される出力を表示してください – akrun