How to fill-in a smaller table into a larger (empty) table with a sorted variable?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Muha
el 14 de Oct. de 2024
Movida: Cris LaPierre
el 15 de Oct. de 2024
I have extracted smaller tables from large data for further analysis. After extraction, the table needs to be sorted and has missing values. To address these two, I have made an empty table with the sorted variable (the channel 'variable'). I just want to shift the values of the extracted tables into the ref_table (empty table).
I have put a partial code for working below:
clc
clear all
close all
load("del.mat")
names = {T1,T2};
for i = 1:2
ref_table = DummyTable;
tab = names{i};
% 1. tab sorted in ascending 'channel' variable and filled-in the reftable
% 2. In second loop, the values of channel 5 are missing, and should be
% left as nan.
end
I can visually explain what I want to do in excel sheet screenshots below:
The red table is sortd first and then filled in the green table as below:
The missing values should be shown as nan, as shown in the next picture
Thank you.
0 comentarios
Respuesta aceptada
Cris LaPierre
el 14 de Oct. de 2024
Joining doesn't appear to selectively replace values in one table. With the assumption that all channels only appear once in the small tables, here's an approach that doesn't use loops.
load del.mat
[~,r] = ismember(T1.channel,DummyTable.channel)
T1new = DummyTable;
T1new(r,:) = T1
[~,r] = ismember(T2.channel,DummyTable.channel)
T2new = DummyTable;
T2new(r,:) = T2
Más respuestas (1)
Rahul
el 15 de Oct. de 2024
I believe you are trying to take extracted tables (T1, T2) and transfer their values into a reference table (ref_table) sorted by the 'channel' variable, while handling missing values (channels that are missing should remain NaN), here's how you can modify your code:
- Sort the extracted table (tab) by the 'channel' variable.
- Match the rows of the sorted table (tab) with the 'channel' values of the reference table (ref_table).
- Transfer the values from the extracted table into the correct positions in the reference table.
clc
clear all
close all
% Load the data (del.mat contains T1, T2, and DummyTable)
load("del.mat")
% Names of the extracted tables
names = {T1, T2};
for i = 1:2
% Reference empty table (DummyTable)
ref_table = DummyTable;
% Current extracted table (T1 or T2)
tab = names{i};
% Sort the extracted table by the 'channel' variable in ascending order
tab = sortrows(tab, 'channel');
% Now, match 'channel' values of 'tab' with 'ref_table'
for j = 1:height(tab)
% Find the index of the current 'channel' in the ref_table
channel_value = tab.channel(j);
% Find the row in the ref_table where the 'channel' matches
idx = find(ref_table.channel == channel_value);
% If a matching channel is found, transfer the data
if ~isempty(idx)
% Transfer the corresponding data from tab to ref_table
ref_table(idx, :) = tab(j, :);
end
end
% Display the updated ref_table for the current table
disp(['Updated ref_table for T', num2str(i)]);
disp(ref_table);
end
For more information regarding the functions used in the given code snippet, refer to the folllowing documentation links:
- Sort rows of matrix or table using "sortrows" function: https://www.mathworks.com/help/matlab/ref/double.sortrows.html
Best!
2 comentarios
Rahul
el 15 de Oct. de 2024
Movida: Cris LaPierre
el 15 de Oct. de 2024
I'm glad you found it useful, thanks @Muha.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!