【问题标题】:Extract sub-matrix based on conditions of specific columns in matlab根据matlab中特定列的条件提取子矩阵
【发布时间】:2017-02-10 11:40:03
【问题描述】:

我想根据原始data 矩阵的某些列的条件选择一个子矩阵x7992。具体来说,原始矩阵是 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×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

根据条件,我想要的是数据中的子矩阵,它不包括第二列中 value>1992 和第三列中 value=1 的那些行

【问题讨论】:

  • 举一个data矩阵的例子和预期的输出
  • 嗨,@Sardar_Usama,我添加了一些关于我的数据的更多详细信息

标签: matlab matrix data-manipulation


【解决方案1】:

根据您给出的示例,以下将执行此操作:

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

【讨论】:

    【解决方案2】:

    您只能得到一个列向量作为输出,因为您的条件向量作为单个 23166x1 向量返回。

    要获取整行值,您需要添加 colon 作为第二个参数。 我将示例分成两行以提高可读性。

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

    如果您想要结果矩阵中的特定列,只需将列号放在向量中而不是冒号运算符中。

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

    【讨论】:

      猜你喜欢
      • 2017-10-24
      • 2012-04-25
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多