当前位置: 首页 > news >正文

MATLAB表格Table与时间序列Timetable的高效操作方法

MATLAB中的表格(Table)时间序列(Timetable) 是处理结构化数据和时间相关数据的核心工具。以下从基础操作到高级技巧,分步骤详解其使用方法。


一、创建与基础操作

1. 表格(Table)的创建与访问

创建表格:
% 定义列数据
Name = {'Alice'; 'Bob'; 'Charlie'};
Age = [25; 30; 35];
Employed = logical([1; 0; 1]); % 逻辑类型

% 创建表格
myTable = table(Name, Age, Employed); 
disp(myTable)

 

访问数据:
  • 按列名访问myTable.Name 或 myTable.('Name')
  • 按行、列索引
    % 获取第一行所有列数据
    row1 = myTable(1, :); 
    
    % 获取第2到3行的'Age'列
    subset = myTable(2:3, 'Age');

2. 时间序列(Timetable)的创建与访问

创建Timetable:
% 定义时间戳(规则时间)
Time = datetime('2023-01-01 08:00:00') + seconds(0:2)';
Data = [1.2; 3.4; 5.6];

% 创建Timetable
myTT = timetable(Time, Data);
disp(myTT)

 

访问特定时间点数据:
% 提取特定时间的数据
row = myTT(myTT.Time == datetime('2023-01-01 08:00:01'), :);

 


二、数据筛选与查询

1. 表格的条件筛选

% 筛选条件:年龄大于30且被雇佣
selectedRows = myTable(myTable.Age > 30 & myTable.Employed, :);

 

2. 时间序列的时间范围筛选

  • 使用timerange函数

    % 筛选时间范围内的数据
    tt_sub = myTT(timerange('2023-01-01 08:00:00', '2023-01-01 08:00:02'), :);
  • 使用时间容忍度(WithTol)(适合非精确匹配):

    % 忽略时间点±2秒误差
    tt_sub = myTT(withtol(datetime('2023-01-01 08:00:01'), seconds(2)), :);

 


三、数据增删改

1. 新增或删除列

% 新增列
myTable.Salary = [50000; 60000; 75000];

% 删除'Employed'列
myTable = removevars(myTable, 'Employed');

2. 合并表格或时间序列

  • 垂直合并(追加行)

    newData = table({'David'}, 28, 'VariableNames', {'Name', 'Age'});
    myTable = vertcat(myTable, newData);
  • 水平合并(添加列)

    extraInfo = table([70; 80; 90], 'VariableNames', {'Weight'});
    myTable = [myTable, extraInfo];
  • 基于时间的合并(Timetable)

    % 同步两个时间序列
    syncedTT = synchronize(myTT1, myTT2);

四、高级操作:重采样与统计

1. 时间序列重采样

  • 降采样(聚合)

    % 每2秒计算一次数据的平均值
    tt_resampled = retime(myTT, 'regular', 'mean', 'TimeStep', seconds(2));
  • 填充缺失值

    % 填充前向数据(使用线性插值)
    tt_filled = retime(myTT, 'regular', 'linear', 'TimeStep', seconds(1));

2. 表格的统计计算

% 按分组计算平均年龄(如按某列分组)
groupStats = groupsummary(myTable, 'GroupColumn', 'mean', 'Age');

五、性能优化技巧

1. 避免循环,使用向量化操作

% 直接计算新列(非循环)
myTable.DoubleAge = myTable.Age * 2;

2. 优化数据类型节省内存

  • 将字符串分类变量转换为categorical类型:
    myTable.Name = categorical(myTable.Name);

3. 预分配内存

在循环外预先分配足够大的表格:

% 预定义表格大小
outputTable = table('Size',[1000, 3], 'VariableTypes', {'string', 'double', 'logical'});

六、常见问题与处理

1. 时间戳不唯一

  • 检测重复时间:

    isDuplicate = duplicated(myTT.Time);
  • 通过retime合并处理:

    % 对重复时间取平均值
    tt_unique = retime(myTT, 'regular', 'mean', 'TimeStep', seconds(1));

2. 缺失值处理

  • 删除含有NaN的行:

    myTable = rmmissing(myTable);
  • 填充缺失数据:

    myTable = fillmissing(myTable, 'linear');

相关文章:

  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
  • L1-088 静静的推荐
  • QT中委托QStyledItemDelegate的使用
  • 6-langchang多模态输入和自定义输出
  • Apache POI详解
  • 保安员考试:巧用记忆术,攻克理论知识堡垒
  • 目标检测YOLO实战应用案例100讲-基于毫米波雷达的多目标检测 (续)
  • protobuf, rpc, 火焰图
  • 大语言模型 (LLM) 基础知识
  • 介绍如何开发一个小样本增量学习程序
  • 国产LIMS系统深度横评 实验室数字化转型最优解
  • Linux之kernel(1)系统基础理论(6)
  • C++ 使用红黑树的实现及迭代器完成对set和map的封装
  • 2025年Draw.io最新版本下载安装教程,附详细图文
  • asm磁盘组扩容加错磁盘
  • 脑电波控制设备:基于典型相关分析(CCA)的脑机接口频率精准解码方法
  • Tomcat下载安装及日志乱码问题解决
  • DeepSeek-专家并行(二)
  • Spring Boot+RabbitMQ+Canal 解决数据一致性
  • 【算法学习计划】动态规划 -- 路径问题
  • 青岛双星名人集团董事长发公开信称家人逼迫交出管理权?公司回应
  • 创历史同期新高!“五一”假期全国快递揽投超48亿件
  • 48岁黄世芳履新中国驻毛里求斯大使,曾在广西工作多年
  • “模”范生上海,如何再进阶?
  • 马上评|子宫肌瘤惊现男性患者,如此论文何以一路绿灯?
  • 韩国总统选举民调:共同民主党前党首李在明支持率超46%