2016-08-26 11 views
0

データセットを完全にランダムに分割する方法は分かりますが、私がしたいことについて "論理的に"ここで私を捨てているようだ。分割データセットを半分に分割し、選択した変数の各レベルの半分をランダムに選択します

私は、120レベルを持つカテゴリ変数Titleを持つデータセットを持っています。各レベルには50の観測値があります。私は、ハーフセットAとハーフセットBのそれぞれがTitleの各レベルの50の観測のうちランダム25を得るような方法でデータセットを半分に分割したいと思います。 (これはEFAとCFA用です)

120レベルとsample(nrow(subset(dataset,title=index), 25)をループするためにはforループが必要になると思いますが、それ以上は少し迷っています。私が考えてきた少しの潜在的な解決策は、ハーフセットAのランダム25を選択しますが、置き換えを行うので、ハーフセットBを作るために再び実行すると、オーバーラップします。

例データ:いつものように

set.seed(1) 
dataset = data.frame(id = rep(1:120, 50), v = rnorm(120*50)) 

おかげで、みんな。

+1

が、それはするのが最善です'set.seed(1);のようなコードで再現可能な例を作ることもできます。 DF = data.frame(id = rep(1:120,50)、v = rnorm(120 * 50)) ' – Frank

答えて

2

私はdata.frameにランダムな順序を取得し、splitにこれを使用する

#some data 
df <- data.frame(title = letters[1:5], col = rnorm(30)) 

library(dplyr) 
df2 <- df %>% group_by(title) %>% mutate(group = sample(n())/n() > 0.5) 
split(df2, df2$group) 
2

をタイトルデータをgroup_byし、各内sampleうキャレットパッケージを使用することを検討してください。以下のコードは、その指示を使用しています。キャレットパッケージとデータ分割に関する

library(caret) 
set.seed(1); DF = data.frame(id = rep(1:120, 50), v = rnorm(120*50)) 
trainIndex <- createDataPartition(DF$id, p = .5, 
            list = FALSE, 
            times = 1) 

DFTrain <- DF[ trainIndex,] 
DFTest <- DF[-trainIndex,] 
table(DFTrain$id) 

より: Data Splitting

1

これは古典的な分割適用コンバイン問題です。アイリスデータの使用:

x <- do.call(rbind,lapply(split(iris,iris$Species), function(x) x[sample(round(nrow(x)/2)),])) 
summary(x) 
    Sepal.Length Sepal.Width  Petal.Length Petal.Width 
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.550 1st Qu.:0.300 
Median :5.800 Median :3.000 Median :4.500 Median :1.400 
Mean :5.872 Mean :3.061 Mean :3.804 Mean :1.212 
3rd Qu.:6.450 3rd Qu.:3.350 3rd Qu.:5.100 3rd Qu.:1.800 
Max. :7.700 Max. :4.400 Max. :6.900 Max. :2.500 
     Species 
setosa :25 
versicolor:25 
virginica :25 

またはその代わりに、あなたはあなたの分割変数に各レベルの行をサンプリングしたデータフレーム内の行を選択することができます:あなたの説明は良いですが

y <- iris[unlist(lapply(levels(iris$Species), function(x) sample(which(iris$Species==x),round(sum(iris$Species==x)/2)))),] 
summary(y) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species 
Min. :4.300 Min. :2.00 Min. :1.000 Min. :0.100 setosa :25 
1st Qu.:5.100 1st Qu.:2.70 1st Qu.:1.500 1st Qu.:0.350 versicolor:25 
Median :5.700 Median :3.00 Median :4.200 Median :1.300 virginica :25 
Mean :5.784 Mean :3.02 Mean :3.725 Mean :1.204     
3rd Qu.:6.400 3rd Qu.:3.30 3rd Qu.:5.250 3rd Qu.:1.800     
Max. :7.900 Max. :4.40 Max. :6.600 Max. :2.500     
関連する問題