使用列名对矩阵的列进行子集化
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 x
和 col 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
)。它更复杂,但更强大。
如果这是一个基本问题,我很抱歉,但我在这里和 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 x
和 col 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
)。它更复杂,但更强大。