我试图在 R 中均匀地拆分数据。例如,我正在使用 R Studio 中内置的数据集汽车,有 50 行。如果我想将数据分成两部分,我会按照以下方式做一些事情:
cars$split <- rep(1:2, each=25)
我将创建一个名为的列split
并将前 25 个值分配给 1,将接下来的 25 个值分配给 2。但是,如果我想将我的数据分成 8 个部分(根据用户的判断),我无法将 50 / 8 平均划分为 6.25。在这种情况下,我只需使用上面的函数将最后两行(因为 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)
}