如何在R中以偶数块切割数据?

时间:2013-12-14 20:23:13

标签: r cut sampling

问题在于:我有一个数据集,比方说:

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

我想将它切成均匀的片(例如5片)。问题是我不能使用分位数或切割因为某些值重复,所以你不能设置不同的断点。

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

(重复断点)

> 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]

(仅使用两个级别)

我知道我可以制作这样的矢量:

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

并将其用于取样。或者我可以用于循环和计数实例。但这需要循环和一些笨拙的编码。我正在寻找一种比这更好的简单高效(R风格)功能。

(我可以写,但我不想重新发明轮子。)

2 个答案:

答案 0 :(得分:1)

您可以使用cut,但必须在矢量的数字索引上使用它,即seq(a),而不是矢量本身。

然后用split

将矢量分割成相等长度的片段
split(a, cut(seq(a), 5, labels = FALSE))

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

另一种方式,没有cut,由

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

答案 1 :(得分:0)

我认为这取决于你接下来要做什么。我喜欢昏暗:

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

现在看看这个:

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