我已经为他的问题挣扎了这么长时间,又回到了优秀状态,浪费了大量的时间和精力。我希望我能在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
的值在每个时间段都相同(就像您的示例中一样(。然后可以使用unique
和table/join
来构建转置表。
首先使用unique
从time
列获取列名,并获取PAR
列的值。例如
T = readtable('data.txt');
var_names = unique(T.TIME);
row_values = unique(T.PAR);
接下来创建一个以PAR
值作为第一列的基表
pivotTable = table(row_values,'VariableNames',{'PAR'});
现在,您可以使用join
对变量名进行循环,将它们作为变量附加到基表中。该回路将具有以下元素
- 选择特定
time
的行,为一组time
值创建子表 - 将表
ETS
的列名设置为当前的time
值。请注意,诸如01:30
之类的时间值不是有效的变量名。因此,可以使用matlab.lang.makeValidName
将这些值转换为表列的适当名称 - 使用联接将此子表附加到基表
下面是一个如何工作的例子:
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