如何根据一列或多列元素的条件在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
我从 .csv 文件中读取了一个 table,它包含 9 列(前两列包含字符串,其他的双精度数字)和许多行(准确地说是 28056),使用 matlab 函数 readtable
并且我将 table 存储在 table
.
现在我想通过强制过滤所有列的数据,例如,名为“a”的列中的值介于 0.9 和 1.1 之间,同时,名为“a”的列中的值“e”小于或等于 0.3。然后我想根据上述条件得到一个新的较小的 table 包含所有列的过滤数据。我该怎么做?
我举个例子来更好地解释。
让我们假设我有前 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