Replacing a numberless string in matrix with a number

5 ビュー (過去 30 日間)
deejt
deejt 2021 年 1 月 27 日
コメント済み: Stephen23 2021 年 1 月 27 日
Hello,
I have a matrix that contains a column with participants' gender written as strings ("female" vs" "male").
I would like to change females to 1 and males to 0. How would I do that?
Thank you!

回答 (2 件)

Stephen23
Stephen23 2021 年 1 月 27 日
Where V is that column:
V = ["female";"male";"female";"male";"male";"female"]
V = 6×1 string array
"female" "male" "female" "male" "male" "female"
X = strcmpi(V,"female")
X = 6x1 logical array
1 0 1 0 0 1
  7 件のコメント
deejt
deejt 2021 年 1 月 27 日
Ok, thank you! it seemed to have been the comma.
But now it seems lucky, that I only had two different strings in my current code.
Out of interest for the future:
What would I do if I had for example a column dedicated to colour = 'green', 'blue', 'yellow' and 'purple' and I want to change these strings as following:
'green' = 1
'blue' = 2
'yellow' = 3
'purple' = 4
Where and how would I then specify the values I want to use to replace the strings?
Stephen23
Stephen23 2021 年 1 月 27 日
編集済み: Stephen23 2021 年 1 月 27 日
For the values 1..N I would simply use the second output of ismember.
If you want to specify totally arbitrary values, then probably the easiest way would be to define a vector of those arbitrary values and then use indexing (e.g. the second output of ismember) to select from that vector.
You will find num2cell useful for both of these.

サインインしてコメントする。


Steven Lord
Steven Lord 2021 年 1 月 27 日
I would likely use a string array.
colors = ["green"; "blue"; "yellow"; "purple"];
% Make some sample data
ind = randi(numel(colors), 10, 1);
arrayOfColors = colors(ind);
whichColor = NaN(size(arrayOfColors));
for c = 1:numel(colors)
whichColor(arrayOfColors == colors(c)) = c;
end
% Display results side by side
results = table(ind, arrayOfColors, whichColor)
results = 10x3 table
ind arrayOfColors whichColor ___ _____________ __________ 4 "purple" 4 3 "yellow" 3 1 "green" 1 2 "blue" 2 2 "blue" 2 1 "green" 1 1 "green" 1 3 "yellow" 3 4 "purple" 4 4 "purple" 4
This also works if arrayOfColors was a categorical array, though for a categorical array there's an easier way to report which element of the valueset was used to generate each element of the categorical array by just using the double function.
colorCats = categorical(arrayOfColors, colors);
results.colorCats = colorCats;
results.whichCat = double(colorCats)
results = 10x5 table
ind arrayOfColors whichColor colorCats whichCat ___ _____________ __________ _________ ________ 4 "purple" 4 purple 4 3 "yellow" 3 yellow 3 1 "green" 1 green 1 2 "blue" 2 blue 2 2 "blue" 2 blue 2 1 "green" 1 green 1 1 "green" 1 green 1 3 "yellow" 3 yellow 3 4 "purple" 4 purple 4 4 "purple" 4 purple 4
all(whichColor == ind)
ans = logical
1
all(results.whichCat == ind)
ans = logical
1
  1 件のコメント
Stephen23
Stephen23 2021 年 1 月 27 日
Without the loop:
[~,whichColor] = ismember(arrayOfColors,colors)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by