在matlab中转换数据块



我已经为他的问题挣扎了这么长时间,又回到了优秀状态,浪费了大量的时间和精力。我希望我能在Matlab中解决这个问题,因为我有很多数据。我的仪器显示的数据如下:

TIME  PAR  ETS  
01:30  0     0  
01:30  40    300  
01:30  100   500
.  
01:30  1500 800  

然后是下一次

02:30 0     0  
02:30 40    344  
02:30 100   653  
.  
.  
02:30  1500 1700  

所以每一个小时左右,我都会得到一个标准杆数和ETS的曲线,但所有的数据都是一个叠在另一个下面的,但我更希望我有一个文件,其中有一个标准杆数列,每个ETS列旁边叠着,时间也作为标题:

PAR   01:30   02:30  
0      0       0  
40      300     344  
100     500     653
.  
.  
1500      800    1700  

我希望我是清白的。有没有可能在Matlab中做到这一点,因为我是一个新手,但我想从某个地方开始。非常感谢。

如果PAR的值在每个时间段都相同(就像您的示例中一样(。然后可以使用uniquetable/join来构建转置表。

首先使用uniquetime列获取列名,并获取PAR列的值。例如

T = readtable('data.txt');
var_names = unique(T.TIME); 
row_values = unique(T.PAR);

接下来创建一个以PAR值作为第一列的基表

pivotTable = table(row_values,'VariableNames',{'PAR'});

现在,您可以使用join对变量名进行循环,将它们作为变量附加到基表中。该回路将具有以下元素

  1. 选择特定time的行,为一组time值创建子表
  2. 将表ETS的列名设置为当前的time值。请注意,诸如01:30之类的时间值不是有效的变量名。因此,可以使用matlab.lang.makeValidName将这些值转换为表列的适当名称
  3. 使用联接将此子表附加到基表

下面是一个如何工作的例子:

for v = var_names'
selected_rows = strcmp(T.TIME,v{1});
subTable = T(selected_rows,{'PAR', 'ETS'});
subTable.Properties.VariableNames{2} =matlab.lang.makeValidName(v{1});        
pivotTable = join(pivotTable,subTable);
end

相关内容

  • 没有找到相关文章

最新更新