我一直在为他的问题苦苦挣扎,然后又恢复了卓越,浪费了大量的时间和精力。 我希望我可以在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
,所以每隔大约一个小时,我会得到一条PAR与ETS的曲线,但所有数据都在另一条下面堆叠,但是我更希望我有一个文件包含一个PAR列,每个ETS列在其侧面堆叠时间同样是标题:
PAR 01:30 02:30
0 0 0
40 300 344
100 500 653
.
.
1500 800 1700
我希望我很清楚。 我是新手,是否可以在Matlab中进行此操作,但我想从某个地方开始。 非常感谢。
答案 0 :(得分:0)
如果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