【发布时间】:2015-03-15 01:49:31
【问题描述】:
我试图在 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)
}
【问题讨论】:
-
findInterval(1:50, seq(0, 50, by=7)) -
@Khashaa 这很好用,但是剩下的值呢?在您的示例中,最后一行(第 50 行)将等于 8。我将如何得到它以使其等于 7?