我有两个向量a and b
。它们都长10
。然后我将它们组合成c
。还有另一个向量d
,其长度为20
。尝试将它们组合在一起时,我收到了错误消息。我想知道是否有任何结构可以让我将不同长度的矢量组合在一起。
> a<-rep(6,10)
> b<-rep(8,10)
> c<-cbind(a,b)
> d<-rep(10,20)
> c
> x<-cbind(c,d)
Warning message:
In cbind(c, d) :
number of rows of result is not a multiple of vector length (arg 2)
答案 0 :(得分:2)
此处的问题是,您的c
不是向量。它是一个矩阵:
a <- rep(6,10);
b <- rep(8,10);
c <- cbind(a,b);
c;
## a b
## [1,] 6 8
## [2,] 6 8
## [3,] 6 8
## [4,] 6 8
## [5,] 6 8
## [6,] 6 8
## [7,] 6 8
## [8,] 6 8
## [9,] 6 8
## [10,] 6 8
c(typeof(c),mode(c),class(c));
## [1] "double" "numeric" "matrix"
这是因为您通过cbind()
两个向量一起创建了它。 cbind()
表示&#34; column-bind&#34;,这意味着它将其操作数视为矩阵或data.frames并将它们的列粉碎在一起,因此您最终会得到更宽的矩阵或data.frame。如果两个操作数都是向量,则将它们视为此操作的单列矩阵。
现在,实际上, 可能cbind()
带有矩阵的向量,但向量的长度应等于矩阵中的高度(即行数)或data.frame。演示:
d <- rep(10,10);
cbind(c,d);
## a b d
## [1,] 6 8 10
## [2,] 6 8 10
## [3,] 6 8 10
## [4,] 6 8 10
## [5,] 6 8 10
## [6,] 6 8 10
## [7,] 6 8 10
## [8,] 6 8 10
## [9,] 6 8 10
## [10,] 6 8 10
cbind(d,c);
## d a b
## [1,] 10 6 8
## [2,] 10 6 8
## [3,] 10 6 8
## [4,] 10 6 8
## [5,] 10 6 8
## [6,] 10 6 8
## [7,] 10 6 8
## [8,] 10 6 8
## [9,] 10 6 8
## [10,] 10 6 8
出现了警告消息,因为您创建的d
长度为20,当矩阵的高度为10. cbind()
在技术上仍然成功(带警告),但只是截断新列 - 来自-vector与矩阵的高度相同:
d <- rep(10,20);
cbind(c,d);
## a b d
## [1,] 6 8 10
## [2,] 6 8 10
## [3,] 6 8 10
## [4,] 6 8 10
## [5,] 6 8 10
## [6,] 6 8 10
## [7,] 6 8 10
## [8,] 6 8 10
## [9,] 6 8 10
## [10,] 6 8 10
## Warning message:
## In cbind(c, d) :
## number of rows of result is not a multiple of vector length (arg 2)
如果您真的想要一个具有不同长度矢量的数据结构,那么您唯一的选择是列表:
a <- rep(6,10);
b <- rep(8,10);
d <- rep(10,20);
list(a=a,b=b,d=d);
## $a
## [1] 6 6 6 6 6 6 6 6 6 6
##
## $b
## [1] 8 8 8 8 8 8 8 8 8 8
##
## $d
## [1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
答案 1 :(得分:0)
如果您只想组合两个长度不等的数值向量,请使用c()运算符:
a <- rep(6,10)
d <- rep(10,20)
c <- c(a,d)
在这种情况下,c也是一个数字向量:
> c
[1] 6 6 6 6 6 6 6 6 6 6 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
但是如果你想让cbind()工作,那么你必须确保“d”小到可以回收:
a <- rep(6,10)
b <- rep(8,10)
c <- cbind(a,b)
d <- rep(10,5)
x <- cbind(c,d)
在这种情况下,x是一个矩阵,向量“d”被循环使用以匹配长度。
> x
a b d
[1,] 6 8 10
[2,] 6 8 10
[3,] 6 8 10
[4,] 6 8 10
[5,] 6 8 10
[6,] 6 8 10
[7,] 6 8 10
[8,] 6 8 10
[9,] 6 8 10
[10,] 6 8 10