我想根据原始x7992
矩阵的某些列的条件选择子矩阵data
。具体来说,原始矩阵是23166乘9,遵循原始高斯代码
x7992 =selif(data,data[.,col_coh].==0 .and data[.,col_year].<=1992);
我在matlab中用
重写了这个x7992 = data(data(:,col_coh)==0 & data(:,col_year)<=1992);
col_coh,col_year
是预定义的列号。
然而,不是给我一个子矩阵,上面的代码行只给我一行(23166-by-1),它不是我想要的(而不是真正的结果基础)这种情况)。那么如何解决?谢谢。
---更新-----
data
矩阵就像(我省略了其他列,因为只有前3列与选择相关),第一列是个人的id
1 1979 0
1 1980 0
1 1981 1
1 1982 0
1 1983 1
2 1990 0
2 1991 0
2 1992 0
2 1993 1
3 1985 0
3 1986 0
3 1987 0
根据条件,我想要的是来自数据的子矩阵,它排除第二列中值>> 1992且第三列中值= 1的行
答案 0 :(得分:0)
根据您提供的示例,以下内容将执行此操作:
data(data(:,2)<=1992 & data(:,3)~=1,:)
给出了这个输出:
1 1979 0
1 1980 0
1 1982 0
2 1990 0
2 1991 0
2 1992 0
3 1985 0
3 1986 0
3 1987 0
答案 1 :(得分:0)
您只获得一个列向量作为输出,因为您的条件向量作为单个23166x1向量返回。
要获取整行值,您需要添加colon作为第二个参数。 我将这个例子分成两行,以便更具可读性。
condIdx = data(:,col_coh)==0 & data(:,col_year)<=1992;
x7992 = data( condIdx, :);
如果您想在结果矩阵中使用特定列,只需将列号放在向量中而不是冒号运算符中。
colsInResult = [1 2 3];
x7992 = data( condIdx, colsInResult);