Borrar filtros
Borrar filtros

How to process the data that have same row name

5 visualizaciones (últimos 30 días)
Rusyaidi Yusri
Rusyaidi Yusri el 27 de Mayo de 2024
Editada: Rusyaidi Yusri el 3 de Jun. de 2024
Hello. Currently I am doing a testing codes. But then, I found a loop problem which is too challenging for me since I am already facing it more than ten times (I am still a newbie). Below is my coding. My goals is to process the raw data and extract the features as stated in the code. Basically the problem that I am facing is that:
Error using tabular/vertcat Duplicate table row name: '2004.03.15.12.0'.
Error in Third_Test (line 55) Time_feature_matrix1 = [Time_feature_matrix1; df];
The file is too big so with that I share my link to GDrive: https://drive.google.com/drive/folders/1MltnJyAUh1BJpoPdNpqOUiHfhdbGF4wV?usp=drive_link
Here the Code:
% Initialize empty tables for each bearing
Time_feature_matrix1 = table();
Time_feature_matrix2 = table();
Time_feature_matrix3 = table();
Time_feature_matrix4 = table();
% Specify the test set and bearing numbers
test_set = 3;
bearing_numbers = [1, 2, 3, 4];
% Set the path to the directory containing the data files
path = 'file directory';
% Get list of files in the directory
files = dir(fullfile(path, '*'));
% Loop through the files in the directory
for j = 1:length(files)
filename = files(j).name;
if files(j).isdir % Skip directories
continue;
end
file_path = fullfile(path, filename); % Full path of the file
dataset = readtable(file_path, 'Delimiter', '\t', 'FileType', 'text'); % Read the dataset
% Loop through each bearing number
for j = 1:length(bearing_numbers)
bearing_no = bearing_numbers(j);
% Extract the bearing data
bearing_data = dataset{:, bearing_no};
% Calculate features
feature_matrix = [
max(bearing_data), % Max
min(bearing_data), % Min
mean(bearing_data), % Mean
std(bearing_data, 1), % Std
sqrt(mean(bearing_data.^2)), % RMS
compute_skewness(bearing_data), % Skewness
compute_kurtosis(bearing_data), % Kurtosis
max(bearing_data) / sqrt(mean(bearing_data.^2)), % CrestFactor
sqrt(mean(bearing_data.^2)) / mean(bearing_data) % FormFactor
];
df = array2table(feature_matrix.'); % Transpose for correct orientation
df.Properties.VariableNames = {'Max', 'Min', 'Mean', 'Std', 'RMS', 'Skewness', 'Kurtosis', 'CrestFactor', 'FormFactor'};
df.Properties.RowNames = {[filename(1:end-4)]}; % Append bearing number
df.Properties.RowNames = {rowName};
% Append the table to the corresponding bearing's feature matrix
switch bearing_no
case 1
if ~ismember(rowName, Time_feature_matrix1.Properties.RowNames)
Time_feature_matrix1 = [Time_feature_matrix1; df];
end
case 2
if ~ismember(rowName, Time_feature_matrix2.Properties.RowNames)
Time_feature_matrix2 = [Time_feature_matrix2; df];
end
case 3
if ~ismember(rowName, Time_feature_matrix3.Properties.RowNames)
Time_feature_matrix3 = [Time_feature_matrix3; df];
end
case 4
if ~ismember(rowName, Time_feature_matrix4.Properties.RowNames)
Time_feature_matrix4 = [Time_feature_matrix4; df];
end
% case 1
% Time_feature_matrix1 = [Time_feature_matrix1; df];
% case 2
% Time_feature_matrix2 = [Time_feature_matrix2; df];
% case 3
% Time_feature_matrix3 = [Time_feature_matrix3; df];
% case 4
% Time_feature_matrix4 = [Time_feature_matrix4; df];
end
end
end
% Define function to compute skewness
function skewness = compute_skewness(x)
n = length(x);
third_moment = sum((x - mean(x)).^3) / n;
s_3 = std(x, 1)^3;
skewness = third_moment / s_3;
end
% Define function to compute kurtosis
function kurtosis = compute_kurtosis(x)
n = length(x);
fourth_moment = sum((x - mean(x)).^4) / n;
s_4 = std(x, 1)^4;
kurtosis = fourth_moment / s_4 - 3;
end
  3 comentarios
Rusyaidi Yusri
Rusyaidi Yusri el 31 de Mayo de 2024
Hi, sorry about that. Already open for everyone with the link. It should available right now.
Infinite_king
Infinite_king el 31 de Mayo de 2024
Still showing 'request to access' screen.

Iniciar sesión para comentar.

Respuesta aceptada

Steven Lord
Steven Lord el 31 de Mayo de 2024
Rather than trying to create a table with duplicate RowNames (which as you see from the error message is not allowed) I'd store that information in a variable in the table itself (I'll call this bearingID based on the comment "% Append bearing number") Then you could probably just use one of the grouping functions from Grouping and Binning Data section on this documentation page (like groupsummary) with the bearingID variable as the grouping variable.
  1 comentario
Rusyaidi Yusri
Rusyaidi Yusri el 3 de Jun. de 2024
Editada: Rusyaidi Yusri el 3 de Jun. de 2024
Hi Steven, thank you for the advice. Ill try it right away.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Tables en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by