java mat转csv_将Matlab .mat转换为csv并保留变量名称

本文介绍如何在Java中将包含结构数据的MAT文件转换为CSV,同时保持变量名称。示例中涉及将结构数据调整为适配CSV格式,并提供了处理不同字段类型(如扩展向量和填充缺失值)的示例代码。
摘要由CSDN通过智能技术生成

我正在尝试将.mat文件转换为csv,保留向量/变量名称.

这是我正在处理的一个例子:

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变量转换为变量到矩阵,但是我会松开变量名.

当然有更好的方法吗?

最佳答案 你如何实际将结构映射到csv?你不能将字段名的直接映射作为第一行的条目,因为矩阵具有不兼容的维度.所以这个例子你必须1.为own_dummies引入几个列,然后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);

当然,您也可以将单个字段拆分为单独的文件,其中字段名包含在文件名中,一般来说,这可能更简单.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值