问题在于:我有一个数据集,比方说:
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风格)功能。
(我可以写,但我不想重新发明轮子。)
答案 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