R でデータを均等に分割しようとしています。たとえば、R Studio に組み込まれている 50 行のデータセット car を使用しています。データを 2 つのセクションに分割する場合は、次の行に沿って何かを行います。
cars$split <- rep(1:2, each=25)
ここでは、という列を作成しsplit
、最初の 25 個の値を 1 に割り当て、次の 25 個の値を 2 に割り当てます。ただし、データを 8 つのセクション (ユーザーの裁量に基づく) に分割したかったのですが、50/8 は 6.25 であるため、均等に分割することはできません。この場合、最後の 2 行 (50 / 8 = 6.25、および 6 * 8 = 48 であるため、2 行が残るため) を、この場合は上記の関数を使用して数値 8 に割り当てるだけです。しかし、私はこれを行うことができませんrep
関数は適切に分割する必要があるため、そのようにいくつかのロジックを書き出そうとしましたが、次のような問題が発生します。
Error in `$<-.data.frame`(`*tmp*`, "split", value = c(1L, 1L, 1L, 1L, : replacement has 48 rows, data has 50
これを修正する方法についてのアイデアはありますか? 私の試みを以下に示します。
numDataPerSection <- floor(nrow(cars) / userInputNum)
if(nrow(cars) %% userInputNum != 0){
#If not divisible, assign last few data points to the last number
cars$split <- rep(1:ncls, each=numDataPerSection, len = nrow(cars) - (nrow(cars) %% userInputNum))
for(i in nrow(cars) %% userInputNum){
cars$split[nrow(cars) - i] <- userInputNum
}
}
#Everything divides correctly
else{
cars$split <- rep(1:ncls, each=numDataPerSection)
}