# Match columns and fill datasets

37 views (last 30 days)
Tanmoyee Bhattacharya on 11 Jul 2024 at 8:23
Answered: Star Strider on 12 Jul 2024 at 3:17
I have two files. One file has some values like that:
1
1
1
1
1
1
2
2
2
2
2
2
2
3
3
3
3
3
3
Another file has values like that
1 10
2 20
3 30
I have to assign values of 1, 2 and 3 from file 2 to file 1. In file 1 if 1 value is 6 then six 10 values will assign. Like that I have 800 values. If there is any shortcut for that.

Star Strider on 12 Jul 2024 at 3:17
Using the accumarray function tthis can be done in one line —
File_1 = [1
1
1
1
1
1
2
2
2
2
2
2
2
3
3
3
3
3
3];
File_2 = [1 10
2 20
3 30];
Out = accumarray(File_1, File_1, [], @(x){File_2(x,:)})
Out = 3x1 cell array
{6x2 double} {7x2 double} {6x2 double}
Result = cell2mat(Out)
Result = 19x2
1 10 1 10 1 10 1 10 1 10 1 10 2 20 2 20 2 20 2 20
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
disp(Result)
1 10 1 10 1 10 1 10 1 10 1 10 2 20 2 20 2 20 2 20 2 20 2 20 2 20 3 30 3 30 3 30 3 30 3 30 3 30
Out{1}
ans = 6x2
1 10 1 10 1 10 1 10 1 10 1 10
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Out{2}
ans = 7x2
2 20 2 20 2 20 2 20 2 20 2 20 2 20
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Out{3}
ans = 6x2
3 30 3 30 3 30 3 30 3 30 3 30
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
.