How to create string of text-objects

3 Ansichten (letzte 30 Tage)
okoth ochola
okoth ochola am 26 Apr. 2023
Kommentiert: chicken vector am 26 Apr. 2023
Hi, I have the following matrix as an output. I wouldlike to make a third column such that the rows corresponding to 1, i would like to write "paid" and the rows corresponding to 0 I would like to write "not paid" so that the resulting table should have three columns, the first two columns are columns of the matrix D and the third should contain either "paid" or "not paid". I have inserted the expected output. The second matrix I have inesrted the column mannualy. Please help.
D =
13 0
4 1
5 1
1 1
2 1
3 1
14 0
5 1
16 0
7 1
8 1
9 1
3 1
4 1
2 1
1 1
3 1
98 0
100 0
what i expect is;
D =
13 0 Notpaid
4 1 paid
5 1 paid
1 1 paid
2 1 paid
3 1 paid
14 0 Notpaid
5 1 paid
16 0 Notpaid
7 1 paid
8 1 paid
9 1 paid
3 1 paid
4 1 paid
2 1 paid
1 1 paid
3 1 paid
98 0 Notpaid
100 0 Notpaid

Akzeptierte Antwort

dpb
dpb am 26 Apr. 2023
Bearbeitet: dpb am 26 Apr. 2023
Holding disparate data types would be a good place to use a table as alternative to the cell array...
D = [randi(100,10,1),rand(10,1)>=0.5];
tD=array2table(D,'VariableNames',{'Amount','PayStatus'}); % convert to table
CODE=categorical({'Notpaid';'Paid'}); % the lookup values
tD=addvars(tD,CODE(tD.PayStatus+1),'NewVariableNames',{'BillStatus'}) % add the verbal status
tD = 10×3 table
Amount PayStatus BillStatus ______ _________ __________ 71 0 Notpaid 65 0 Notpaid 77 0 Notpaid 49 1 Paid 80 1 Paid 73 1 Paid 41 1 Paid 8 0 Notpaid 74 0 Notpaid 26 0 Notpaid

Weitere Antworten (2)

chicken vector
chicken vector am 26 Apr. 2023
You can't concatenate doubles and string in one array, because the array can be only one of them.
If you want to only store the information you can use cells:
D = [randi(100,20,1),rand(20,1)>=0.5];
result = cell(2,1);
result{1} = D;
result{2} = strings(length(D),1);
for j = 1 : length(D)
if ~D(j,2)
result{2}(j) = "Notpaid";
else
result{2}(j) = "Paid";
end
end
If it's for display purposes you can transform everything into a string:
D = [randi(100,20,1),rand(20,1)>=0.5];
result = strings(length(D),3);
result(:,1:2) = string(D);
for j = 1 : length(D)
if ~D(j,2)
result(j,3) = "Notpaid";
else
result(j,3) = "Paid";
end
end
  4 Kommentare
dpb
dpb am 26 Apr. 2023
I don't know that it's "much" better, but does illustrate using the lookup table approach that many novices may have not seen...it trades one temporary variable for another so isn't a tremendous advantage one way or another other than, perhaps, putting the constants into one array so can just adjust it if number of choices changes.
chicken vector
chicken vector am 26 Apr. 2023
Aesthetically much better*

Melden Sie sich an, um zu kommentieren.


Dyuman Joshi
Dyuman Joshi am 26 Apr. 2023
Bearbeitet: Dyuman Joshi am 26 Apr. 2023
Given the format of your final output, you will either have to use string arrays, cell arrays or categorical arrays.
%Categorical array method
D =[13 0
4 1
5 1
1 1
2 1
3 1
14 0
5 1
16 0
7 1
8 1
9 1
3 1
4 1
2 1
1 1
3 1
98 0
100 0];
%Values corresponding to paid
idx = D(:,2);
%Convert D to a categorical array
D = categorical(D);
str = categorical(["Notpaid", "paid"]);
D(:,3) = str(idx+1)
D = 19×3 categorical array
13 0 Notpaid 4 1 paid 5 1 paid 1 1 paid 2 1 paid 3 1 paid 14 0 Notpaid 5 1 paid 16 0 Notpaid 7 1 paid 8 1 paid 9 1 paid 3 1 paid 4 1 paid 2 1 paid 1 1 paid 3 1 paid 98 0 Notpaid 100 0 Notpaid
  1 Kommentar
dpb
dpb am 26 Apr. 2023
Actually, the categorical is better choice than the string... +1

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by