2016-10-02 74 views
-1

特定列的条件子矩阵我要选择基于原有data矩阵的某些列的条件子矩阵x7992。具体而言,原矩阵是23166乘9,遵循原始高斯码提取基于MATLAB中

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周的cols相关的选择),第一列是个人

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 
ID

根据条件,我想要的是从数据中的子矩阵,它排除了第二列中值> 1992的值和第三个值中值为1的行

+0

给出的'data'矩阵和预期输出 –

+0

嗨,@ Sardar_Usama,添加我的一些数据进一步细节的示例 – zlqs1985

回答

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 
0

你只有一列向量作为输出,因为你的病情矢量返回为一个单一的23166x1载体。

要得到你需要的colon添加为第二个参数值的整行。 我已经分裂的例子在两行做出更具可读性。

condIdx = data(:,col_coh)==0 & data(:,col_year)<=1992; 
x7992 = data(condIdx, :); 

如果您想在结果矩阵中使用特定的列,只需将列号放入向量中而不是冒号操作符。

colsInResult = [1 2 3]; 
x7992 = data(condIdx, colsInResult);