Matlab 使用数组中的混合数据类型创建表

Matlab 使用数组中的混合数据类型创建表,matlab,matlab-table,Matlab,Matlab Table,我想把几个数组组成一个表。由于它们有不同的数据类型,这似乎不是很简单。 考虑这个简单的MWE: daysTotal = 2; hoursTotal = daysTotal*24; timeStepHours = 1/4; nhi = 1/timeStepHours; q_in_mean = 0.82; % You may need to change this, according to your locale startDateT

我想把几个数组组成一个表。由于它们有不同的数据类型,这似乎不是很简单。 考虑这个简单的MWE:

daysTotal       = 2;
hoursTotal      = daysTotal*24;
timeStepHours   = 1/4;
nhi             = 1/timeStepHours;
q_in_mean       = 0.82;

% You may need to change this, according to your locale
startDateTimeStr = '02.09.2019 00:00:00';
startDateTime   = datetime(startDateTimeStr);
dateTimeVector  = startDateTime:hours(timeStepHours): ...
    (startDateTime+days(daysTotal)-hours(timeStepHours));

var1            = ones(hoursTotal*nhi, 3);
var2            = q_in_mean*ones(hoursTotal*nhi, 1);

tableFull       = table(dateTimeVector.', var1, var2);
虽然这样做有效,但我得到了
tableFull.var2
的旧形状,尽管我希望有一个
(hoursTotal*nhi,5)
表,即每个数组列有一个单独的表列。 如果所有元素都来自同一数据类型,则这将起作用:

tableFull       = array2table([dateTimeVector.', var1, var2])
虽然这样做有效,但似乎并不十分优雅:

tableFull       = horzcat(table(dateTimeVector.'), array2table(var1), table(var2));

有没有更好的方法从这三个数据类型不同的变量中获取
(hoursTotal*nhi,5)
表?

从R2018a开始,您可以使用

>> splitvars(tableFull)
ans =
  192×5 table
            Var1            var1_1    var1_2    var1_3    var2
    ____________________    ______    ______    ______    ____
    02-Sep-2019 00:00:00      1         1         1       0.82
    02-Sep-2019 00:15:00      1         1         1       0.82
...
...
对于这种特殊情况,另一种选择可能是这样做

>> array2timetable([var1, var2], 'RowTimes', dateTimeVector.')
ans =
  192×4 timetable
            Time            Var1    Var2    Var3    Var4
    ____________________    ____    ____    ____    ____
    02-Sep-2019 00:00:00     1       1       1      0.82
    02-Sep-2019 00:15:00     1       1       1      0.82
...
...
顺便说一句,要独立于区域设置解析日期字符串,可以使用


这对你有好处吗
tableFull=table(dateTimeVector.),var1(:,1),var1(:,2),var1(:,3),var2)
?(对我来说)很难理解您的解决方案需要基于此示例的通用性。感谢您为我指出
时间表
,非常有用!我唯一不明白的是:
timeline
是在R2016b中引入的,而
writeMetable
是在R2019a中引入的。由于我目前在R2018a上,我需要通过
timetable2table
将时间表转换回常规表格,以便使用
writetable
功能。有点笨拙,但我能忍受。
startDateTime = datetime(startDateTimeStr, 'InputFormat', 'dd.MM.yyyy HH:mm:ss');