根据matlab中特定列的条件提取子矩阵

时间:2016-10-02 10:41:36

标签: matlab matrix data-manipulation

我想根据原始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的行

2 个答案:

答案 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);