【问题标题】:subsetting columns of a matrix by using column names使用列名对矩阵的列进行子集化
【发布时间】:2015-09-21 19:52:52
【问题描述】:

如果这是一个基本问题,我很抱歉,但我找不到任何解决方案,无论是在此处还是在 Stata 手册(第 14 章,“矩阵表达式”)中。

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

mat A = (1,2,3\4,5,6\7,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 创建一个由第一列和最后一列组成的矩阵。 我能够执行的“最接近”的事情是:

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

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

【问题讨论】:

    标签: matrix subset stata


    【解决方案1】:

    一种方法是:

    mat A = (1,2,3\4,5,6\7,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)。它更复杂,但功能更强大。

    【讨论】:

    • 感谢您的解释。我已经开始研究 Mata,我认为这绝对值得投入时间。非常感谢您的支持!
    猜你喜欢
    • 2021-04-29
    • 2020-04-19
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多