【发布时间】:2011-03-20 02:25:06
【问题描述】:
我必须在 R 中将向量拆分为 n 个大小相等的块。我找不到任何基本函数来做到这一点。谷歌也没有让我去任何地方。到目前为止,这是我想出的;
x <- 1:10
n <- 3
chunk <- function(x,n) split(x, factor(sort(rank(x)%%n)))
chunk(x,n)
$`0`
[1] 1 2 3
$`1`
[1] 4 5 6 7
$`2`
[1] 8 9 10
【问题讨论】:
-
是的,很不清楚你得到的是“n 个大小相等的块”的解决方案。但也许这也能让你到达那里:x
-
问题中的解决方案和前面评论中的解决方案都不正确,因为如果向量有重复条目,它们可能不起作用。试试这个: > foo chunk(foo, 2) (给出错误的结果) > chunk(foo, 3) (也是错误的)
-
(继续前面的评论)为什么? rank(x) 不需要是整数 > rank(c(1,1,2,3)) [1] 1.5 1.5 3.0 4.0 所以这就是问题中的方法失败的原因。这个有效(感谢下面的哈兰)> chunk2
-
> split(foo, cut(foo, 3, labels = FALSE)) (也是错误的)
-
正如@mathheadinclouds 所暗示的,示例数据是一个非常特殊的情况。更通用的示例将是更有用和更好的测试。例如。
x <- c(NA, 4, 3, NA, NA, 2, 1, 1, NA ); y <- letters[x]; z <- factor(y)给出了缺失数据、重复值、尚未排序且属于不同类(整数、字符、因子)的示例。