如何在R中将数据均匀切割成片段?

16 浏览
0 Comments

如何在R中将数据均匀切割成片段?

问题是:我有一个数据集,比如说:\n

a <- c(0,0,0,0,1,1,1,1,1,1)

\n我想把它分成均匀的部分(比如说5个部分)。问题是我不能使用分位数或者切割函数,因为有一些重复值,所以不能设置不同的断点。\n

> quantile(a)
  0%  25%  50%  75% 100% 
   0    0    1    1    1 

\n(重复的断点)\n

> cut(a, 5)
 [1] (-0.001,0.199] (-0.001,0.199] (-0.001,0.199] (-0.001,0.199] (0.801,1]     
 [6] (0.801,1]      (0.801,1]      (0.801,1]      (0.801,1]      (0.801,1]     
Levels: (-0.001,0.199] (0.199,0.4] (0.4,0.6] (0.6,0.801] (0.801,1]

\n(只使用了两个级别)\n我知道我可以生成这样一个向量:\n

b <- c(1,1,2,2,3,3,4,4,5,5)

\n然后用它来进行抽样。或者我可以使用for循环来计算实例数。但是这需要使用循环和一些笨拙的编码。我正在寻找一个简单高效(R风格)的函数,它比这个更好。\n(我可以自己写,但是我不想重复造轮子。)

0
0 Comments

原因:问题的提问者想知道在R中如何将数据均匀地分割成相等的部分。

解决方法:可以使用dim函数来实现。首先,通过将a的维度重新设置为2行和a的长度除以2,可以将a分成两个部分。然后,可以通过dim函数来查看重新设置后的a的维度。

整理后的文章如下:

在R中如何将数据均匀地分割成相等的部分?

问题的解决方法取决于接下来你要做什么。我喜欢使用dim函数来解决这个问题:

dim(a) <- c(2, length(a) / 2)

这样,a的样子就变成了这样:

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    1    1    1
[2,]    0    0    1    1    1

通过将a的维度重新设置为2行和a的长度除以2,我们可以将a分成两个部分。然后,通过使用dim函数,我们可以查看重新设置后的a的维度。

0
0 Comments

在R中如何将数据均匀地分割成若干部分?

问题的原因是在使用cut函数时,需要将其应用于向量的数值索引,而不是向量本身。然后可以使用split函数将向量分割成等长的部分。

解决方法一:

split(a, cut(seq(a), 5, labels = FALSE))

这将返回一个包含五个短向量的列表。

解决方法二:

split(a, rep(seq(5), each = length(a) / 5))

这种方法不使用cut函数,而是利用rep函数和seq函数将向量分割成等长的部分。

0