在Matlab

时间:2015-08-19 20:51:43

标签: matlab str-replace

我正在使用400x1200导入的表(从.xls生成的可读表),其中包含字符串,双精度数,日期和NaN。每列都是一致输入的。我正在寻找一种方法来查找任何给定字符串表中的所有实例('请帮我')并用双(1)替换所有实例。在Matlab中执行此操作将为我节省大量工作,从而对此项目其余部分所使用的方法进行更改。

不幸的是,我所看到的所有选项(regexp,strrep等)只能将一个字符串作为替代。 Strfind同样没有帮助,因为在桌子上打字。缺乏cellfun也使得它比它应该更难。我知道解决方案应该与找到我想要的字符串的索引有关,然后只是循环DataFile {subscript} = [1],但我找不到办法去做。

3 个答案:

答案 0 :(得分:0)

您可以做的如下:

[rows, cols] = size(table); % Get the size of your table
YourString = 'Help me please'; % Create your string
Strmat = repmat(YourString,rows,cols); % Stretch to fill a matrix of table size
TrueString = double(strcmp(table,Strmat)); % Compares all entries with one another

TrueString现在包含逻辑1,其中字符串'Help me please'位于,0表示不存在。

如果你有一个包含多个类的表,那么切换到单元格可能很方便。

答案 1 :(得分:0)

首先,您应该在单元格数组中转换表格。

然后,您可以使用strrepstr2num,例如

% For a given cell index
strrep(yourCellIndexVariable, "Help me please", "1");
str2num(yourCellIndexVariable);

这将使用字符串“1”(strrep函数)替换字符串“Help me please”,str2num将根据字符串将单元格索引更改为double值。

by yourCellIndexVariable我的意思是来自单元格数组的元素。有几种方法可以从单元格数组中获取所有单元格,但我认为您已经解决了这一部分。

答案 2 :(得分:0)

非常感谢大家帮助思考解决方案。这就是我最终的结果:

% Reads data
[~, ~, raw] = xlsread ( 'MyTable.xlsx');
MyTable = raw;

% Makes a backup of the data in table form
MyTableBackup = readtable( 'MyTable.xlsx' );

% Begin by ditching 1st row with variable names
MyTable(1,:) = [];

% wizard magic - find all cells with strings
StringIndex = cellfun('isclass', MyTable, 'char');

% strrep goes here to recode bad strings. For example:
MyTable(StringIndex) = strrep(MyTable(StringIndex), 'PlzHelpMe', '1');

% Eventually, we are done, so convert back to table
MyTable = cell2table(MyTable);

% Uses backup Table to add variable names
% (the readtable above means the bad characters in variable names are already escaped!) 
MyTable.Properties.VariableNames = MyTableBackup.Properties.VariableNames;

这意味着新值以字符串形式存在('1',而不是1作为double),所以现在我只需要str2double来访问它们进行分析。我的内容--Matlab用于数字。再次感谢所有人!