访问元素
问题描述:
比方说,我定义了一个矩阵:访问元素
matrix a = (2,3 \ 4,7 \ 6,13)
我可以访问“13”是这样的:
display a[3,2]
是否也可以进入“13”,而指到“6”来指定行?换句话说,我们会以某种方式表示该行是行(可能有多个),在第一列包含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 |
+-----+
“行包含6”由跨行的“元素等于6”的总数定义。注意,如果(a)一行中有多于一个6和/或(b)多于一行为6,则该代码有效。在最后一种情况下,所选内容包含多个元素。
符号似乎不言自明,除了可能:
作为前缀信号“元素”操作。要将Stata矩阵复制到Mata中,请使用st_matrix()
。
注意:确定代码应该在第一列中选择的内容仅作为热心的练习。
请注意,您的文本显示一行包含6(隐含在任何列中),但您的R代码(据我了解)仅在第一列中查找6 **。 –
...也没有关于访问_name_ ... –
良好的捕获 - 我是马虎。我更新了文字以反映第一栏。我更新的标题是按价值而不是按名称。谢谢! – bill999