MATLAB表格Table与时间序列Timetable的高效操作方法
创作时间:
作者:
@小白创作中心
MATLAB表格Table与时间序列Timetable的高效操作方法
引用
CSDN
1.
https://blog.csdn.net/weixin_31268759/article/details/146055858
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');
热门推荐
观众实付价格跟电影票“票价”对不上,到底有何玄机?
主持稿怎么写?一步步教您写出优秀主持稿
中央空调保温棉的作用及维保注意事项
刑事拘留案底对个人及社会的影响
春天一定要会用菊花!但是菊花品种多,功效也不同,看看你是否用错了?
小学教育专业深度解读:师范类专业培养小学教育者
家庭存储硬盘选择与维护指南:HDD和SSD优劣对比及应用场景分析
探析拘留所是否允许携带智能手机及其实质法律问题
肝光点密集能不能治好
财务管理专业的求职者怎么写专业技能
【费曼】任何伟大的科学成就,都源于思想自由
费曼:厌烦物理后,“玩”出诺贝尔奖
2024年中国漆包线产业深度分析、投资前景及发展趋势预测(简版报告)
Logo:企业识别标志的含义与象征
CRM客户关系管理系统的优点:15个使用效果提升点
怎样通过 CRM 系统优化中小企业销售流程?
北方种植小麦品种的选择有哪些
没有对账函能否起诉:债权人权益保护与证据链构建
睡前必看!科学揭秘助眠音乐:选对旋律,轻松拥有好睡眠
中学生学编程用什么软件好
工程合同不含税税由谁交纳
十二时辰之性格密码:从出生时辰看人性格特点,你属于哪一类?
一序一检和MES系统:制造业生产管理的两种重要工具
从被动到主动:主观能动性的力量
英冠4场数据前瞻:米堡主场剑指开门红 利兹联西布朗难拿3分?
四大趋势重塑全球经济:人口老龄化、技术变革、制度变迁与全球化
民间借贷协议公证的审核内容有哪些?
糖尿病患者必读:科学监测血糖的时间点与适用条件
兽用盐酸四环素有哪些用途?
杀戮尖塔超简易攻略