2023.7.28
一、将 Excel 文件中的数据保存为 MATLAB 中的 .mat 文件,并且将其保存为 struct 格式。
PS. 以下内容部分借助ChatGPT。
1、使用 xlsread
函数读取 Excel 文件中的数据:
% 读取 Excel 文件数据
[num_data, text_data] = xlsread('data.xlsx');
2、创建一个 struct 并将 Excel 中的数据存储到 struct 的字段中:
% 创建 struct 并存储数据
data_struct.name = text_data(:, 1); % 第一列为姓名
data_struct.age = num_data(:, 1); % 第一列为年龄
data_struct.city = text_data(:, 2); % 第二列为城市
数字和文本应该是会单独储存。
3、删除结构体(struct)中的某个字段(field),可以使用 rmfield
函数:
new_struct = rmfield(old_struct, 'field_name');
% eg.% data_struct = rmfield(data_struct, 'age');
或者直接手动删除再保存。
4、使用 save
函数将 struct 保存为 .mat 文件:
% 保存 struct 到 .mat 文件
save('data_file.mat', 'data_struct');
2023.7.30
二、将1*50的struct数组存为.csv文件,包括将struct中有的字段下的行向量数据转换为列向量,以及建立循环将每个字段下每行数据的内容都写在一个变量名称之下。
PS. 这部分的代码得益于师兄的帮助。
struct数组的样貌如下:
注意:data字段下的数据是以行向量的形式储存的,而我最终希望得到一个列向量。因此要对其进行转置。
clear;
clc; #清除命令行窗口和工作区。在保证变量名不重复的情况下也可以不清除。
for i = 1:length(Data)
data((i-1)*162+1:i*162,1) = transpose(dt(i).data); #当i=1时,data中的数据从第1行到第162行。transpose正是对data字段中的数据进行转置操作。注意左侧的data并不是指代结构体的字段,而是一个在循环过程中用于暂存转置后数据的普通变量。下agent/subjID同。
agent((i-1)*162+1:i*162,1) = Data(i).agent;
subjID((i-1)*162+1:i*162,1) = repmat(i, 162, 1); #这里简化为让被试名只以数字1-50的形式呈现。
end
DT = table(subjID,data,agent,'VariableNames',{'subjID','data','agent'}); #添加一行变量名。
writetable(DT, 'Data.csv'); #将以上数据存储为csv文件。
得到的csv文件如下所示:
2023.10.17
后来接触了太多matlab代码,来不及整理记录了,但上面两条或许对有的人有帮助。先分享出来~