如何根据一列或多列元素的条件在matlab中过滤table?

How to filter a table in matlab according to a condition on the elements of one or more columns?

我从 .csv 文件中读取了一个 table,它包含 9 列(前两列包含字符串,其他的双精度数字)和许多行(准确地说是 28056),使用 matlab 函数 readtable 并且我将 table 存储在 table.

类型的变量中

现在我想通过强制过滤所有列的数据,例如,名为“a”的列中的值介于 0.9 和 1.1 之间,同时,名为“a”的列中的值“e”小于或等于 0.3。然后我想根据上述条件得到一个新的较小的 table 包含所有列的过滤数据。我该怎么做?

我举个例子来更好地解释。 让我们假设我有前 10 行: 它们是小行星数据,所以让我们假设我想通过施加 <=2 来过滤它们,所以我想获得一个新的 table,其中我有所有列,但只有满足我条件的行,即table 第 1、5、6、8、9、10 行。

这是我的代码:

clear all; close all; clc;

file_path = 'D:\OneDrive\MSc_Thesis\Projects\NEOs_orbits\InputFiles\';
file_name_asteroids = 'NEOs_asteroids.csv';

opts = delimitedTextImportOptions("NumVariables", 9);

% Specify range and delimiter
opts.DataLines = [2, Inf];
opts.Delimiter = ",";

% Specify column names and types
opts.VariableNames = ["pdes", "name", "epoch", "a", "e", "i", "om", "w", "ma"];
opts.VariableTypes = ["string", "string", "double", "double", "double",...
                      "double", "double", "double", "double"];

% Specify file level properties
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";

% Specify variable properties
opts = setvaropts(opts, ["pdes", "name"], "WhitespaceRule", "preserve");
opts = setvaropts(opts, ["pdes", "name"], "EmptyFieldRule", "auto");

% Import the data
Asteroids_data = readtable([file_path,file_name_asteroids],opts);

要查看输入文件NEOs_asteroids.csv你可以看看这个link,我在这里提出了另一个问题:

你想要

new_table=Asteroids_data(Asteroids_data.a>0.9 & Asteroids_data.a<1.1 & Asteroids_data.e<0.3,:)

玩具数据恰好是空的。所以只是为了说明方法,

new_table=Asteroids_data(Asteroids_data.a>2 & Asteroids_data.e<0.5,:)

new_table =

  2×9 table

 pdes       name         epoch         a          e         i         om        w         ma  
______    _________    __________    ______    _______    ______    ______    ______    ______

"1580"    "Betulia"    2.4596e+06    2.1973    0.48716    52.079    62.292    159.51    16.629
"1916"    "Boreas"     2.4596e+06    2.2723    0.44984    12.883     340.6    335.92    352.24