如何在不使用循环的情况下有条件地将数据从电子表格导入MATLAB

时间:2015-04-05 18:20:54

标签: excel matlab import

给定一个包含列中变量和行中观察值的电子表格,我想有选择地将这些观察值导入MATLAB,其中指定列中的值等于指定的字符串(在本例中为'K')。我知道使用循环的可能性,但我的数据集非常大,我更喜欢更快的解决方案(逻辑索引?)。我正在使用表变量。

我非常感谢任何建议。我在网上找到了多个解决方案来处理数组变量,但不能用于表变量。

我的电子表格如下所示:

Variable1    Variable2    Variable3
234789       234678234    'K'
98764        087632167    'V'
87641        492876437    'V'
43789234     123678923    'K'

在此示例中,我只想导入第1行和第4行(不计算标题),因为它们'K'的值为Variable3

我在导入整个数据集后尝试了tableName(tableName(:,3) ~= 'K', :) = [],但收到了Undefined operator '~=' for input arguments of type 'table'错误消息。

1 个答案:

答案 0 :(得分:0)

好的,可能有更好的答案,但这就是我所知道的。我从来没有能够使用这种逻辑:

tableName(tableName(:,3) ~= 'K', :) = []

即使您在表格和字符(table~ ='K')之间使用正确的逻辑比较,您可能会遇到尝试使用逻辑的问题。

为了在没有循环的情况下执行您想要的操作,我通常会创建一个临时变量,该变量仅包含将确定要保留哪些行的变量列。这是我的意思的一个例子......

data = {1,2,'b';3,4,'c';5,6,'d';7,8,'d'};

%find which rows where the third column is 'd'
temp = data(:,3);%create temporary variable
out = strcmp(temp,'d');%returns logical 1 where strings are the same
index = find(out);%returns the indexes of which rows contain 'd'

data = data(index,:);%now you only have the rows containing 'd'