How to create string of text-objects

1 回表示 (過去 30 日間)
okoth ochola
okoth ochola 2023 年 4 月 26 日
コメント済み: chicken vector 2023 年 4 月 26 日
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

採用された回答

dpb
dpb 2023 年 4 月 26 日
編集済み: dpb 2023 年 4 月 26 日
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

その他の回答 (2 件)

chicken vector
chicken vector 2023 年 4 月 26 日
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 件のコメント
dpb
dpb 2023 年 4 月 26 日
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 2023 年 4 月 26 日
Aesthetically much better*

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


Dyuman Joshi
Dyuman Joshi 2023 年 4 月 26 日
編集済み: Dyuman Joshi 2023 年 4 月 26 日
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 件のコメント
dpb
dpb 2023 年 4 月 26 日
Actually, the categorical is better choice than the string... +1

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

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by