Main Content

withinrange

确定时间表行时间是否在指定的时间范围内

自 R2020a 起

说明

示例

如果 TT 的行时间范围完全在 rangeOfTimes 指定的时间范围内,则 tf = withinrange(TT,rangeOfTimes) 返回 1 (true)。否则,将返回 0 (false)。

TT 的行时间范围由其最小和最大行时间决定。

示例

如果 TT 的行时间都相同并且都等于 oneTime 指定的时间,则 tf = withinrange(TT,oneTime) 返回 1

示例

[tf,whichRows] = withinrange(___) 还返回逻辑索引,指示 TT 的哪些行在指定的时间范围内。

示例

全部折叠

创建一个行时间范围在 0 秒到 0.4 秒之间的时间表。

Intensity = [100;98.7;95.2;101.4;99.1];
TT = timetable(Intensity,'TimeStep',seconds(0.1))
TT=5×1 timetable
     Time      Intensity
    _______    _________

    0 sec          100  
    0.1 sec       98.7  
    0.2 sec       95.2  
    0.3 sec      101.4  
    0.4 sec       99.1  

创建一个时间范围对象,其时间范围为 –1 到 1 秒。要创建该对象,请使用 timerange 函数。其输入是持续时间,您可以使用 seconds 函数来创建它们。

rangeOfTimes = timerange(seconds(-1),seconds(1))
rangeOfTimes = 
	timetable timerange subscript:

		Select timetable rows with times in the half-open interval:
		  Starting at, including:   -1 sec
		  Ending at, but excluding: 1 sec

确定 TT 的行时间是否在 rangeOfTimes 指定的范围内。

tf = withinrange(TT,rangeOfTimes)
tf = logical
   1

创建另一个范围为 0.1–0.9 秒的时间范围对象。withinrange 函数返回 0,因为 TT 的第一个行时间不在 rangeOfTimes 范围内。

rangeOfTimes = timerange(seconds(0.1),seconds(0.9))
rangeOfTimes = 
	timetable timerange subscript:

		Select timetable rows with times in the half-open interval:
		  Starting at, including:   0.1 sec
		  Ending at, but excluding: 0.9 sec

tf = withinrange(TT,rangeOfTimes)
tf = logical
   0

创建两个具有不同时间范围的时间表。这些时间表也可以有不同的变量和不同的行数。

Intensity = [100;98.7;95.2;101.4;99.1];
TT1 = timetable(Intensity,'TimeStep',seconds(0.1))
TT1=5×1 timetable
     Time      Intensity
    _______    _________

    0 sec          100  
    0.1 sec       98.7  
    0.2 sec       95.2  
    0.3 sec      101.4  
    0.4 sec       99.1  

Readings = [74;83;99;75;87;93;92];
TT2 = timetable(Readings,'TimeStep',seconds(0.1),'StartTime',seconds(-0.1))
TT2=7×1 timetable
      Time      Readings
    ________    ________

    -0.1 sec       74   
    0 sec          83   
    0.1 sec        99   
    0.2 sec        75   
    0.3 sec        87   
    0.4 sec        93   
    0.5 sec        92   

确定 TT1 的行时间范围是否在 TT2 的行时间范围内。

tf = withinrange(TT1,TT2)
tf = logical
   1

另一方面,TT2 的行时间范围不在 TT1 的范围内。

tf = withinrange(TT2,TT1)
tf = logical
   0

创建一个包含在每个月的开头和中旬设置的价格的时间表。

Time = datetime({'2018-01-01';'2018-01-15';'2018-02-01';'2018-02-15';
                 '2018-03-01';'2018-03-15'});
Price = randi([85 110],6,1);
TT = timetable(Time,Price)
TT=6×1 timetable
       Time        Price
    ___________    _____

    01-Jan-2018     106 
    15-Jan-2018     108 
    01-Feb-2018      88 
    15-Feb-2018     108 
    01-Mar-2018     101 
    15-Mar-2018      87 

使用 datetime 函数指定一个时间点。此时间点是 2018 年 2 月 1 日午夜。

oneTime = datetime('2018-02-01')
oneTime = datetime
   01-Feb-2018

比较 TToneTime 的行时间。虽然一个行时间碰巧等于 oneTime,但其他行时间不相等。因此,withinrange 函数返回 0。

tf = withinrange(TT,oneTime)
tf = logical
   0

时间表可以有重复的行时间。将 TT 的所有行时间更改为相同的值,然后再次调用 withinrange。现在,所有行时间都等于 oneTimewithinrange 返回 1

TT.Time(1:end) = oneTime
TT=6×1 timetable
       Time        Price
    ___________    _____

    01-Feb-2018     106 
    01-Feb-2018     108 
    01-Feb-2018      88 
    01-Feb-2018     108 
    01-Feb-2018     101 
    01-Feb-2018      87 

tf = withinrange(TT,oneTime)
tf = logical
   1

创建一个时间表。

Intensity = [100;98.7;95.2;101.4;99.1];
TT = timetable(Intensity,'TimeStep',seconds(0.1))
TT=5×1 timetable
     Time      Intensity
    _______    _________

    0 sec          100  
    0.1 sec       98.7  
    0.2 sec       95.2  
    0.3 sec      101.4  
    0.4 sec       99.1  

指定一个时间范围。然后确定 TT 的哪些行在该时间范围内。第二个输出参量 whichRows 是逻辑数组,其元素对应于 TT 的行。对于行时间在时间范围内的每行,它包含的对应元素为 1;对于行时间不在时间范围内的每行,它包含的对应元素为 0

rangeOfTimes = timerange(seconds(0.1),seconds(0.35));
[tf,whichRows] = withinrange(TT,rangeOfTimes)
tf = logical
   0

whichRows = 5x1 logical array

   0
   1
   1
   1
   0

要访问该时间范围内的行,请使用 whichRowsTT 进行索引。

TT2 = TT(whichRows,:)
TT2=3×1 timetable
     Time      Intensity
    _______    _________

    0.1 sec       98.7  
    0.2 sec       95.2  
    0.3 sec      101.4  

输入参数

全部折叠

输入时间表。TT 的最小和最大行时间决定其时间范围。

时间范围,指定为时间范围对象或时间表。

  • 如果将 rangeOfTimes 指定为时间范围对象,则使用 timerange 函数创建时间范围。将范围的开始和结束时间显式指定为 timerange 的输入。

    • 如果输入时间表 TT 有附加的事件表,则您可以通过使用事件过滤器的时间范围对象调用 withinrange。有关使用事件过滤器指定时间范围的详细信息,请参阅 eventfilter (自 R2023b 起)

  • 如果您将 rangeOfTimes 指定为时间表,则不需要显式指定范围的开始和结束时间。withinrange 会自动从时间表的最小和最大行时间获取它们。

单一时间,指定为 datetimeduration 标量。

输出参量

全部折叠

True 或 false,如果 TT 的行时间范围完全在 rangeOfTimes 指定的时间范围内,则返回逻辑值 1,否则返回逻辑值 0

在指定时间范围内的行的索引,以逻辑数组形式返回。您可以使用 whichRowsTT 进行索引。

例如,在以下代码中,您可以使用 withinrange 的第二个输出对时间表 TT 进行索引。时间表 TT2 仅包括其行时间在 rangeOfTimes 指定的范围内的那些行。

[tf,whichVars] = (TT,rangeOfTimes);
TT2 = T(whichRows,:)

扩展功能

版本历史记录

在 R2020a 中推出

全部展开