从数组创建具有混合数据类型的表



我想将多个数组组合成一个表。由于它们具有不同的数据类型,因此似乎不是很简单。 考虑这个简单的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来执行此操作,即

>> 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
...
...

这种特殊情况的另一种选择可能是制作这样的timetable

>> 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
...
...

顺便说一句,要解析独立于区域设置的日期字符串,您可以使用'InputFormat'编写

startDateTime = datetime(startDateTimeStr, 'InputFormat', 'dd.MM.yyyy HH:mm:ss');

相关内容

  • 没有找到相关文章

最新更新