在R中拆分矢量/数组

时间:2012-03-21 15:16:10

标签: arrays r vector split

我想使用R执行类似于合并排序的操作。我想将矢量/数组分成两部分。我的输入存在于名为inp。

的变量中
> inp <- c(5,6,7,8,9,1,2,3,4)
> inplen <- length(inp)
> left <- inp[1:ceiling(inplen/2)]
> right <- inp[ceiling(inplen/2)+1:inplen]
> left
[1] 5 6 7 8 9
> right
[1]  1  2  3  4 NA NA NA NA NA
> length(left) 
[1] 5
> length(right)
[1] 9

在这里你可以看到,虽然我将矢量分成两半,但是右半部分的尺寸大于左半部分的尺寸。此外,右半部分还有一些值为NA的条目。我无法弄清楚为什么创建的第二个向量(称为右)有这些额外的条目。

3 个答案:

答案 0 :(得分:3)

由于“:”的运算符优先级高于“+”,您遇到(众所周知的)问题:

ceiling(inplen/2)+1:inplen
[1]  6  7  8  9 10 11 12 13 14

因为您的索引超出了向量的长度而返回了NA。

答案 1 :(得分:2)

你错过了一个括号:

right = inp[(ceiling(inplen/2)+1):inplen]

要扩展,假设我们有

1 + 1:3 

这是1+(1:3)还是(1+1):3。 R将其解释为1+(1:3),因此当您键入1+1:3时,您会得到:

1 + c(1,2,3)

成为

c(2,3,4)

另一个常见的问题是:

R> x = 1:5
R> x[2:length(x)-1]
[1] 1 2 3 4

我们错误地选择了元素1到4,而不是选择元素2到4。

答案 2 :(得分:1)

您可以使用splitcut创建断点:

split(inp,cut(seq(inplen),breaks=c(0,ceiling(inplen/2),inplen),labels=c("left","right")))
$left
[1] 5 6 7 8 9

$right
[1] 1 2 3 4