使用列名对矩阵的列进行子集化

subsetting columns of a matrix by using column names

如果这是一个基本问题,我很抱歉,但我在这里和 Stata 手册(第 14 章,"Matrix expressions")上都找不到任何解决方案。

我的目标是使用列名对矩阵进行子集化。 我的初始矩阵 A 如下所示:

mat A = (1,2,3,5,6,8,9)
mat rownames A = "row a" "row b" "row c"
mat colnames A = "col x" "col y" "col z"

mat list A

我需要使用列名 col xcol z 创建一个由第一列和最后一列组成的矩阵。 我能够执行的 "closest" 是:

mat B = A[.,"col x".."col z"]

这显然是错误的。任何其他尝试都会导致矩阵 B 仅由第一列组成。 我在这里错过了什么?

一种方法是:

mat A = (1,2,3,5,6,8,9)
mat rownames A = "row a" "row b" "row c"
mat colnames A = "col x" "col y" "col z"
matrix list A

matrix B = A[1...,colnumb(A,"col x")], A[1...,colnumb(A,"col z")]
matrix list B

这将提取 "col x""col z" 的所有行,并使用列连接运算符 ,(逗号)将它们放在一起。

另一个是:

matrix C = A["row a".."row c" , "col x"], A["row a".."row c" , "col z"]

还有一个:

matrix D = A[1... , "col x"], A[1... , "col z"]

另请参阅 Stata 的矩阵编程语言,Mata (help mata)。它更复杂,但更强大。