将Matlab.mat转换为csv并保留变量名
我试图将.mat文件转换为csv,保留向量/变量名。 这是我正在处理的一个例子:将Matlab.mat转换为csv并保留变量名,matlab,csv,Matlab,Csv,我试图将.mat文件转换为csv,保留向量/变量名。 这是我正在处理的一个例子: mymat = model_id: [2217x1 double] own_dummies: [2217x26 double] id: [2217x1 double] product: [2217x1 double] const: [2217x1 double] mpd: [2217x1 double]
mymat =
model_id: [2217x1 double]
own_dummies: [2217x26 double]
id: [2217x1 double]
product: [2217x1 double]
const: [2217x1 double]
mpd: [2217x1 double]
air: [2217x1 double]
mpg: [2217x1 double]
trend: [2217x1 double]
space: [2217x1 double]
hpwt: [2217x1 double]
cdindex: [20x1 double]
cdid: [2217x1 double]
outshr: [2217x1 double]
firmid: [2217x1 double]
share: [2217x1 double]
price: [2217x1 double]
我尝试过使用csvwrite('test.csv',mymat)
,但它给了我一个错误:
??? Undefined function or method 'real' for input arguments of type 'struct'.
Error in ==> dlmwrite at 192
str = sprintf('%.*g%+.*gi',precn,real(m(i,j)),precn,imag(m(i,j)));\
Error in ==> csvwrite at 32
dlmwrite(filename, m, ',', r, c);
我想问题是我给csvwrite提供的是一个结构而不是一个矩阵。
我可以将struct变量转换为variable,再转换为矩阵,但这样会丢失变量名
当然有更好的方法吗?如何将结构映射到csv?不能将字段名直接映射为第一行的条目,因为矩阵的维度不兼容。所以这个例子你必须1。为自己的虚拟人和2介绍几个专栏。展开cdindex 因此,您可以编写一个包装器,使矩阵本身兼容,并将列自己写入文件中。沿着(未经测试的,概念性的)路线的东西
当然,您也可以将各个字段拆分为单独的文件,其中字段名包含在文件名中,一般来说,这可能更简单。那么您将变量名保存在哪里?您想将它们存储在第一列吗?您好,请点击这里。是的,第一列或第一行会非常感谢你的答案!看起来它应该会起作用。我将在这里尝试并评论。
function saveData(filename, data, type)
% at first bring struct data to sensible format
if strcmp(type)='my_mat_type'
data.own_dummies2 = data.own_dummies[2,:]; % split into seperate columns
%...
data.own_dummies26 = data.own_dummies[26,:];
data.own_dummies = data.own_dummies[1,:];
data.cdindex = [data.cdindex -ones(1,2217-length(data.cdindex)]; % pad any missing values as -1
end;
FD = fopen(filename, 'w');
%todo did it open?
fields = fieldnames(data);
nfields = length(fields);
% create column name values
columns = strcat(strcat(fields,',')); % creates string = col1,col2,...coln,
columns = columns(1:length(columns)-1); %remove trailing comma
CRNL = char([10 13]); % or so
% print columns and newline
fprintf(FD,strcat(columns,CRNL));
dataout = cell2mat(struct2cell(data));
% use your method to write the data to the file
fclose(FD);