在Stata的Mata语言中实现类似R的逻辑子集化操作
在Mata中实现矩阵正负值替换为1/-1的方法
针对你的需求,这里提供两种实用实现方式,对应不同思路:
方法一:使用sign()函数(最简便)
Mata内置的sign()函数直接返回矩阵元素的符号:正数返回1,负数返回-1,0返回0,完美匹配你的需求,一步到位:
clear all version 18 mata: tmp = (-0.5, 1 \ 5, -5) tmp = sign(tmp) // 直接转换元素符号 tmp // 输出结果 end
运行后得到的结果就是你期望的矩阵:
1 2 +-----------+ 1 | -1 1 | 2 | 1 -1 | +-----------+
方法二:模拟R的逻辑子集化操作
如果你想复刻R中逻辑索引替换的思路,Mata也支持元素级的条件索引,但要注意Mata的元素级比较运算符需带冒号(:>、:<),区别于矩阵级的比较(>、<):
clear all version 18 mata: tmp = (-0.5, 1 \ 5, -5) tmp[tmp :> 0] = 1 // 匹配所有正数元素,替换为1 tmp[tmp :< 0] = -1 // 匹配所有负数元素,替换为-1 tmp // 输出结果 end
这种方式和你在R中写的逻辑完全一致,仅需把R的>、<换成Mata的:>、:<,即可实现元素级的条件筛选替换。
内容的提问来源于stack exchange,提问作者MinChul Park
相关产品推荐
相关产品推荐

