按值访问矩阵元素
Access element of matrix by value
假设我定义了一个矩阵:
matrix a = (2,3 \ 4,7 \ 6,13)
我可以这样访问“13”:
display a[3,2]
是否也可以在引用“6”指定行的同时访问“13”?换句话说,我们会以某种方式表示该行是第一列中包含 6 的行(可能不止一个),然后我们需要该行的第二列。
在 R 中,我们可能会这样做:
a1 <- data.frame(c(2,4,6), c(3,7,13))
a1[a1[,1]==6, 2]
Stata 中有类似的东西吗?
您可以使用 Stata 的矩阵语言和一些编程来做到这一点,但我会转向 Mata,其定义的函数允许在精神上类似于 R 的直接解决方案。考虑这个对话。
. mata
------------------------------------------------- mata (type end to exit) --------------
: a = (2,3 \ 4,7 \ 6,13)
: a :== 1
1 2
+---------+
1 | 0 0 |
2 | 0 0 |
3 | 0 0 |
+---------+
: a :== 6
1 2
+---------+
1 | 0 0 |
2 | 0 0 |
3 | 1 0 |
+---------+
: rowsum(a :== 6)
1
+-----+
1 | 0 |
2 | 0 |
3 | 1 |
+-----+
: select(a, rowsum(a :== 6))
1 2
+-----------+
1 | 6 13 |
+-----------+
: a2 = select(a, rowsum(a :== 6))
: a2[, 2]
13
: b = (6,6 \ 6,6 \ 6,6)
: select(b, rowsum(b :== 6))
1 2
+---------+
1 | 6 6 |
2 | 6 6 |
3 | 6 6 |
+---------+
: b2 = select(b, rowsum(b :== 6))
: b2[, 2]
1
+-----+
1 | 6 |
2 | 6 |
3 | 6 |
+-----+
"row contains a 6" 由跨行的总 "element is equal to 6" 定义。请注意,如果 (a) 一行中有多个 6 and/or (b) 有多个行带有 6,则代码有效。在最后一种情况下,selected 包含不止一个元素。
这个符号看起来应该是不言自明的,除了可能 :
作为前缀表示 "elementwise" 操作。要将 Stata 矩阵复制到 Mata 中,请使用 st_matrix()
。
注意:仅将第一列中 select 的代码设置为热心者的练习。
假设我定义了一个矩阵:
matrix a = (2,3 \ 4,7 \ 6,13)
我可以这样访问“13”:
display a[3,2]
是否也可以在引用“6”指定行的同时访问“13”?换句话说,我们会以某种方式表示该行是第一列中包含 6 的行(可能不止一个),然后我们需要该行的第二列。
在 R 中,我们可能会这样做:
a1 <- data.frame(c(2,4,6), c(3,7,13))
a1[a1[,1]==6, 2]
Stata 中有类似的东西吗?
您可以使用 Stata 的矩阵语言和一些编程来做到这一点,但我会转向 Mata,其定义的函数允许在精神上类似于 R 的直接解决方案。考虑这个对话。
. mata
------------------------------------------------- mata (type end to exit) --------------
: a = (2,3 \ 4,7 \ 6,13)
: a :== 1
1 2
+---------+
1 | 0 0 |
2 | 0 0 |
3 | 0 0 |
+---------+
: a :== 6
1 2
+---------+
1 | 0 0 |
2 | 0 0 |
3 | 1 0 |
+---------+
: rowsum(a :== 6)
1
+-----+
1 | 0 |
2 | 0 |
3 | 1 |
+-----+
: select(a, rowsum(a :== 6))
1 2
+-----------+
1 | 6 13 |
+-----------+
: a2 = select(a, rowsum(a :== 6))
: a2[, 2]
13
: b = (6,6 \ 6,6 \ 6,6)
: select(b, rowsum(b :== 6))
1 2
+---------+
1 | 6 6 |
2 | 6 6 |
3 | 6 6 |
+---------+
: b2 = select(b, rowsum(b :== 6))
: b2[, 2]
1
+-----+
1 | 6 |
2 | 6 |
3 | 6 |
+-----+
"row contains a 6" 由跨行的总 "element is equal to 6" 定义。请注意,如果 (a) 一行中有多个 6 and/or (b) 有多个行带有 6,则代码有效。在最后一种情况下,selected 包含不止一个元素。
这个符号看起来应该是不言自明的,除了可能 :
作为前缀表示 "elementwise" 操作。要将 Stata 矩阵复制到 Mata 中,请使用 st_matrix()
。
注意:仅将第一列中 select 的代码设置为热心者的练习。