本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

table2timetable

将表转换为时间表

说明

示例

TT = table2timetable(T) 将表 T 转换为时间表。T 中的第一个日期时间或持续时间变量成为 TT 的行时间向量。T 的其余变量成为 TT 的变量。

  • 如果 T 是不含行名称的 M×N 表,则 TTM×(N-1) 时间表。

  • 如果 T 是含有行名称的 M×N 表,则 table2timetableT 的行名称赋给 TT 的变量。因此,TTM×N 时间表。

有关创建和使用时间表的详细信息,请参阅时间表

要通过文本或电子表格文件中的数据创建时间表,请首先使用 readtable 函数将数据读取到表中。然后使用 table2timetable 将表转换为时间表。

示例

TT = table2timetable(T,'RowTimes',timeVarName) 将表变量 timeVarName 指定为输出时间表的行时间向量。timeVarName 可以是 T 中包含日期时间或持续时间值的任何变量的名称。T 的其余变量成为 TT 的变量。

示例

TT = table2timetable(T,'RowTimes',rowTimes) 将向量 rowTimes 指定为输出时间表的行时间向量。T 的所有变量都将成为 TT 的变量。

示例

TT = table2timetable(T,'SampleRate',Fs) 使用采样率 Fs 计算固定间隔的行时间。Fs 是一个正数值标量,用于指定每秒采样数 (Hz)。第一个行时间是零秒。

示例

TT = table2timetable(T,'TimeStep',dt) 使用时间步 dt 计算固定间隔的行时间。dt 是一个持续时间或日历持续时间值,用于指定连续行时间之间的时间长度。第一个行时间是零秒。

示例

TT = table2timetable(___,'StartTime',t0) 指定开始时间 t0(而不是零秒)作为第一个行时间。当您使用上面两个语法中的 'SampleRate''TimeStep' 名称-值对组参数创建规则时间表时,可以使用此语法。

示例

全部折叠

将包含日期和时间的表转换为时间表。

将电力中断数据从文件 outages.csv 读取到表中。该表包含中断时间和恢复时间。

T = readtable('outages.csv');
T(1:5,:)
ans=5×6 table
       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }

将该表转换为时间表。第一个含有时间的变量 OutageTime 成为 TT 的时间向量。

TT = table2timetable(T);
TT(1:5,:)
ans=5×5 timetable
       OutageTime          Region         Loss     Customers     RestorationTime            Cause       
    ________________    _____________    ______    __________    ________________    ___________________

    2002-02-01 12:18    {'SouthWest'}    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    2003-01-23 00:49    {'SouthEast'}    530.14    2.1204e+05                 NaT    {'winter storm'   }
    2003-02-07 21:15    {'SouthEast'}     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    2004-04-06 05:44    {'West'     }    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    2002-03-16 06:18    {'MidWest'  }    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }

使用 TT 的时间向量的行时间对其进行索引。您可以将行时间视为用于指定行的标签。

TT('2003-02-07 21:15',:)
ans=1×5 timetable
       OutageTime          Region        Loss     Customers     RestorationTime          Cause      
    ________________    _____________    _____    __________    ________________    ________________

    2003-02-07 21:15    {'SouthEast'}    289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'}

计算电力中断的持续时间。使用圆点语法将行时间提取为向量。

TT.OutageDuration = TT.RestorationTime - TT.OutageTime;
TT(1:5,:)
ans=5×6 timetable
       OutageTime          Region         Loss     Customers     RestorationTime            Cause           OutageDuration
    ________________    _____________    ______    __________    ________________    ___________________    ______________

    2002-02-01 12:18    {'SouthWest'}    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }      148:32:00   
    2003-01-23 00:49    {'SouthEast'}    530.14    2.1204e+05                 NaT    {'winter storm'   }            NaN   
    2003-02-07 21:15    {'SouthEast'}     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }      226:59:00   
    2004-04-06 05:44    {'West'     }    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}       00:26:00   
    2002-03-16 06:18    {'MidWest'  }    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }       65:05:00   

将表转换为时间表,并指定将成为时间表的时间向量的表变量。

将电力中断数据从文件 outages.csv 读取到表中。该表包含中断时间和恢复时间。

T = readtable('outages.csv');
T(1:5,:)
ans=5×6 table
       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }

将该表转换为时间表。将第二个含有日期和时间的变量 RestorationTime 指定为时间表的时间向量。

TT = table2timetable(T,'RowTimes','RestorationTime');
TT(1:5,:)
ans=5×5 timetable
    RestorationTime        Region           OutageTime        Loss     Customers            Cause       
    ________________    _____________    ________________    ______    __________    ___________________

    2002-02-07 16:50    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    {'winter storm'   }
    NaT                 {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05    {'winter storm'   }
    2003-02-17 08:14    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    {'winter storm'   }
    2004-04-06 06:10    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    {'equipment fault'}
    2002-03-18 23:23    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    {'severe storm'   }

通过添加单独的包含行时间的时间向量,将表转换为时间表。所有表变量都将成为时间表的变量。

Reading1 = [98;97.5;97.9;98.1;97.9];
Reading2 = [120;111;119;117;116];
T = table(Reading1,Reading2)
T=5×2 table
    Reading1    Reading2
    ________    ________

        98        120   
      97.5        111   
      97.9        119   
      98.1        117   
      97.9        116   

Time = [seconds(1):seconds(1):seconds(5)];
TT = table2timetable(T,'RowTimes',Time)
TT=5×2 timetable
    Time     Reading1    Reading2
    _____    ________    ________

    1 sec        98        120   
    2 sec      97.5        111   
    3 sec      97.9        119   
    4 sec      98.1        117   
    5 sec      97.9        116   

创建一个表。

Reading1 = [98;97.5;97.9;98.1;97.9];
Reading2 = [120;111;119;117;116];
T = table(Reading1,Reading2)
T=5×2 table
    Reading1    Reading2
    ________    ________

        98        120   
      97.5        111   
      97.9        119   
      98.1        117   
      97.9        116   

将采样率指定为 500 Hz。使用该采样率和零秒的起始行时间将 T 转换为时间表。

TT = table2timetable(T,'SampleRate',500)
TT=5×2 timetable
      Time       Reading1    Reading2
    _________    ________    ________

    0 sec            98        120   
    0.002 sec      97.5        111   
    0.004 sec      97.9        119   
    0.006 sec      98.1        117   
    0.008 sec      97.9        116   

创建一个表。

Reading1 = [98;97.5;97.9;98.1;97.9];
Reading2 = [120;111;119;117;116];
T = table(Reading1,Reading2)
T=5×2 table
    Reading1    Reading2
    ________    ________

        98        120   
      97.5        111   
      97.9        119   
      98.1        117   
      97.9        116   

使用 seconds 函数将时间步指定为 10 秒。使用该采样率和零秒的起始行时间将 T 转换为时间表。

TT = table2timetable(T,'TimeStep',seconds(10))
TT=5×2 timetable
      Time      Reading1    Reading2
    ________    ________    ________

    00:00:00        98        120   
    00:00:10      97.5        111   
    00:00:20      97.9        119   
    00:00:30      98.1        117   
    00:00:40      97.9        116   

创建一个表。

Reading1 = [98;97.5;97.9;98.1;97.9];
Reading2 = [120;111;119;117;116];
T = table(Reading1,Reading2)
T=5×2 table
    Reading1    Reading2
    ________    ________

        98        120   
      97.5        111   
      97.9        119   
      98.1        117   
      97.9        116   

通过将时间步指定为 10 秒、将开始时间设置为 5 秒,将其转换为时间表。

dt = seconds(10);
t0 = seconds(5);
TT = table2timetable(T,'TimeStep',dt,'StartTime',t0)
TT=5×2 timetable
     Time     Reading1    Reading2
    ______    ________    ________

    5 sec         98        120   
    15 sec      97.5        111   
    25 sec      97.9        119   
    35 sec      98.1        117   
    45 sec      97.9        116   

输入参数

全部折叠

输入表。

输入表中变量的名称,指定为字符向量或字符串标量。

赋给输出时间表的行时间,指定为日期时间向量或持续时间向量。rowTimes 的元素数必须等于输入表的行数。rowTimes 中的时间值不需要唯一、排序或有规律。

采样率,指定为正数值标量。Fs 指定每秒采样数 (Hz)。

时间步,指定为日期时间标量或持续时间标量。

数据类型: datetime | duration | calendarDuration

开始时间,指定为日期时间标量或持续时间标量。

  • 如果 t0 是日期时间值,则 TT 的行时间是日期时间值。

  • 如果 t0 是持续时间,则行时间是持续时间。

如果时间步 dt 是日历持续时间值,则 t0 必须是日期时间值。

数据类型: datetime | duration

输出参数

全部折叠

输出时间表。该时间表可以存储元数据,例如说明、变量单位、变量名称和行时间。有关详细信息,请参阅 timetable 的“属性”部分。

提示

  • 在某些情况下,您可以使用指定行时间之间的规则时间步的语法来调用 table2timetable,而 table2timetable 返回不规则时间表。当您使用日历时间单位指定时间步并且存在引入不规则时间步的行时间时,就会出现这种结果。例如,如果您创建时间步为一个日历月的时间表,从 2019 年 1 月 31 日开始,则就月份而言,时间步是不规则的。

    stime = datetime(2019,1,31);
    tstep = calmonths(1);
    T = table([1:3]');
    TT = table2timetable(T,'TimeStep',tstep,'StartTime',stime)
    
    TT =
    
      3×1 timetable
    
           Time        Var1
        ___________    ____
    
        31-Jan-2019     1  
        28-Feb-2019     2  
        31-Mar-2019     3  
    
    

    夏令时 (DST) 的转换或闰秒的行时间也会造成不规则性。下表指定了可能意外产生不规则时间表的行时间值和时间步。

    行时间值

    时间步

    开始时间,指定为一个月的第 29 天、第 30 天或第 31 天。

    日历月数或季度数。

    开始时间,指定为 2 月 29 日。

    日历年数。

    在从 DST 转换到标准时间的一天中凌晨 1:00 到 2:00 之间发生的行时间(当行时间指定为其时区遵守 DST 的日期时间值时)。日历天数或月数。

    闰秒行时间(当行时间指定为其时区为 UTCLeapSeconds 时区的日期时间值时)。有关闰秒的列表,请参阅 leapseconds

    以任何日历单位(天、周、月、季度或年)指定的时间步。

兼容性考虑

全部展开

从 R2018b 起不建议使用

扩展功能

在 R2016b 中推出