使用数组中的混合数据类型创建 table
Create table with mixed data types from arrays
我想将几个数组组合成一个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
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)
table,即,一个单独的 table 列用于每个数组列。
如果所有元素都来自 相同 数据类型,则此 将 工作:
tableFull = array2table([dateTimeVector.', var1, var2])
虽然这行得通,但看起来不是很优雅:
tableFull = horzcat(table(dateTimeVector.'), array2table(var1), table(var2));
是否有更好的方法从这三个具有不同数据类型的变量中获取 (hoursTotal*nhi, 5)
table?
从 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');
我想将几个数组组合成一个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
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)
table,即,一个单独的 table 列用于每个数组列。
如果所有元素都来自 相同 数据类型,则此 将 工作:
tableFull = array2table([dateTimeVector.', var1, var2])
虽然这行得通,但看起来不是很优雅:
tableFull = horzcat(table(dateTimeVector.'), array2table(var1), table(var2));
是否有更好的方法从这三个具有不同数据类型的变量中获取 (hoursTotal*nhi, 5)
table?
从 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');