当该cbind
函数用于组合 2 个或更多矩阵时,生成的矩阵会继承列名。下面是一个简单的例子。我有两个 (2x2) 矩阵m1
和m2
. 的列m1
是a
和b
; 的列m2
是c
和d
。如果 Icbind
m1
和,我得到一个包含 4 列的m2
矩阵:a
、b
和。c
d
> m1 <- matrix(1:10, ncol = 2)
> colnames(m1) <- letters[1:2]
> m2 <- matrix(11:20, ncol = 2)
> colnames(m2) <- letters[3:4]
>
> M <- cbind(m1, m2)
> M
a b c d
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
但是,我刚刚意识到,如果矩阵m1
中m2
包含时间序列数据,则生成的矩阵的命名约定cbind
会发生变化。
> m3 <- ts(m1)
> m4 <- ts(m2)
> M2 <- cbind(m3, m4)
> M2
Time Series:
Start = 1
End = 5
Frequency = 1
m3.a m3.b m4.c m4.d
1 1 6 11 16
2 2 7 12 17
3 3 8 13 18
4 4 9 14 19
5 5 10 15 20
如您所见, 的列名M2
以它们最初所属的矩阵的名称为前缀,这是我的问题。我想保持时间序列格式的矩阵,但避免新的命名约定。当我阅读文档时cbind
,我发现了这个deparse.level
论点,但它没有帮助:
M2 <- cbind(m3, m4, deparse.level = 0)
M2
当然,简单的解决方法是创建一个字符向量,结合原始矩阵的列名,并用它来命名新矩阵的列;但是,我很想知道是否可以对此做些什么。
> column_names <- c(colnames(m3), colnames(m4))
> colnames(M2) <- column_names
> M2
Time Series:
Start = 1
End = 5
Frequency = 1
a b c d
1 1 6 11 16
2 2 7 12 17
3 3 8 13 18
4 4 9 14 19
5 5 10 15 20
非常感激您的帮忙。