可写入包括单元格向量而不自动分隔值并添加字段

时间:2016-04-26 17:39:47

标签: matlab

如果您有一张表格,例如

T = 
  Cell_Vec      Scalar  
____________    _____
[1x3 double]    22497

并使用writetable(T,'filename.txt','Delimiter','tab')表被破坏,因为它再次读取时看起来不一样(添加了字段)。 Matlab建议将其保存为.mat但在我的情况下这不是一个好的解决方案,因为文件格式必须更稳定并且可以在其他程序中工作(例如excel / calc)。

来自Matlab:

Matlab help page

T =

            Age    Height    Weight    BloodPressure
            ___    ______    ______    _____________

Smith       38     71        176       124     93   
Johnson     43     69        163       109     77   
Williams    38     64        131       125     83   
Jones       40     67        133       117     75   
Brown       49     64        119       122     80   

将表T写入逗号分隔的文本文件myPatientData.dat,并显示文件内容。

writetable(T,'myPatientData.dat','WriteRowNames',true)
type 'myPatientData.dat'

Row,Age,Height,Weight,BloodPressure_1,BloodPressure_2  
Smith,38,71,176,124,93  
Johnson,43,69,163,109,77  
Williams,38,64,131,125,83  
Jones,40,67,133,117,75  
Brown,49,64,119,122,80 

但我想要变量名称" BloodPressure"保持完整,以便:

Row,Age,Height,Weight,BloodPressure  
Smith,38,71,176,124 93  
Johnson,43,69,163,109 77  
Williams,38,64,131,125 83  
Jones,40,67,133,117 75  
Brown,49,64,119,122 80  

有什么建议吗?令人沮丧,因为writetable函数似乎最方便,是否可以进行简单的重写?

如果我制作.txt文件并手动在Cell_Vec值之间添加空格,则变量readtable之间的标签将至少正常工作...

1 个答案:

答案 0 :(得分:0)

如果你想保留这样的两个值,最简单的方法就是将它们转换为一个格式化的字符串,然后你的其他程序可以解析它。

T = table([1;2;3], [124, 90; 130 40; 150 10], 'VariableNames', {'Age', 'BP'});

%// Convert blood pressure to "Systolic/Diastolic"
T.BP = cellfun(@(x)sprintf('%d/%d',x(1),x(2)), num2cell(T.BP, 2), 'uni', 0);

writetable(T,'myPatientData.dat','WriteRowNames',true)

type('myPatientData.dat')

%// Age,BP
%// 1,124/90
%// 2,130/40
%// 3,150/10