Move values based on string

1 visualizzazione (ultimi 30 giorni)
Tfm tfm
Tfm tfm il 12 Nov 2016
Commentato: Walter Roberson il 14 Nov 2016
I need to import the following sheet from excel:
Then I want to move every value in column C to columns D, E and F based on results of string searches.
For example, I want to search column B (description) for 'gas' inside each cell and if it is present, move corresponding value in C (Value) to column D.
The same for strings 'Restaurant' and 'Hotel'. Note that the search should be case insensitive and matlab should take my parameter as an incomplete string, ie, imagine there was a Description HotelHereNow, then matlab should find it using parameter 'hotel'.
Of course this is just an example, real database is about 2000x10.
What is the best way to import the excel sheet: table, cell array? How can I search and move?

Risposte (1)

Walter Roberson
Walter Roberson il 12 Nov 2016
For the searching part:
B_lower = lower(B); %to lowercase
contains_gas = ~cellfun(@isempty, strfind(B_lower, 'gas'));
D(contains_gas) = C(contains_gas);
for the reading part: readtable() would probably be good. You would then probably modify what I wrote above, to be (for example)
B_lower = lower(YourTable.Description); %to lowercase
contains_gas = ~cellfun(@isempty, strfind(B_lower, 'gas'));
YourTable.Gas(contains_gas) = YourTable.Value(contains_gas);
  6 Commenti
Tfm tfm
Tfm tfm il 13 Nov 2016
Your suggestion results in the error:
Error using cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
Can't find the reason, since index 1 is the string 'Description' and
lower(sheet(1,2))
works nice.
Walter Roberson
Walter Roberson il 14 Nov 2016
B_lower_descript = cellfun(@lower, sheet(:,2), 'Uniform', 0);

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by