【问题标题】:Create table with mixed data types from arrays从数组创建具有混合数据类型的表
【发布时间】:2020-01-05 09:42:26
【问题描述】:

我想将几个数组组合到一张表中。由于它们具有不同的数据类型,因此看起来不是很简单。 考虑一下这个简单的 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) 表?

【问题讨论】:

  • 这对你有帮助吗? tableFull = table( dateTimeVector.', var1(:,1), var1(:,2), var1(:,3), var2 )? (对我来说)很难根据这个示例理解您的解决方案需要多么通用。

标签: matlab matlab-table


【解决方案1】:

从 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');

【讨论】:

  • 感谢您将我指向timetable,非常有用!唯一我不明白的是:timetable 是在 R2016b 中引入的,而 writetimetable 是在 R2019a 中引入的。由于我目前在 R2018a 上,我需要通过timetable2table 将时间表转换回常规表,这样我就可以使用writetable 函数。有点笨拙,但我可以忍受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2013-10-04
  • 2021-12-15
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
相关资源
最近更新 更多