关于matlab的table数据结构的使用

matlab中比较好使的数据结构有数组、矩阵、元胞数组、结构数组等等,但随着大数据的普及,在2013以以上版本的的matlab中,出现了类似R语言中的列表一样的一个新的数据结构——table。

关于table的简单的介绍可以参考:
Matlab table数据结构三篇
配合着doc文档,很快就能驾轻就熟。然而Matlab求全不求精,数据分析和处理很多方面做得并不如R语言。


一个简单的例子,来谈table的连接

有两个表格大概长成这样:

matlab链接mysql创建表查看执行结果_数据分析

matlab链接mysql创建表查看执行结果_数据结构_02

我想做的是通过姓名做为关键词,将两个表格拼接在一块。因为不是行对行一一对应的,我们需要查找,进行拼接。你可以写一个循环一条一条判断,再拼接在一块,如果不嫌麻烦的话。Matlab的table数据结构,跟数据库里面的表示一样样的,简单的join函数就可以实现这个功能,如下:

clc
clear
close all
%% 读取并处理数据,有时候matlab老是出错,重启一下就行了。
ad = readtable('adress.xls','ReadVariableNames' ,1,'FileType','spreadsheet');
all =readtable('all.xlsx','ReadVariableNames' ,1,'FileType','spreadsheet');
address = ad;
stu = all(1:9613,1:5);
stu = stu(find(stu.x_____==2),:);
%% 数据筛选与合并
%add_len = size(address,1);
%new_table = innerjoin(address,stu);
% stu.Properties.VariableNames = cell(stu.Properties.VariableNames);
% address.Properties.VariableNames = cell(address.Properties.VariableNames)
% stu.Properties.VariableDescriptions
% stu.x____ = num2cell(stu.x____)
% stu.x_____ = num2cell(stu.x_____)
% stu(:,1) = num2cell(stu{:,1} )
new_table = outerjoin(stu,address,'Type','left','MergeKeys',true,'keys','x__');
writetable(new_table,'students.csv');

我这里用的是向左外拼接,事实上用自然拼接、向右外拼接以及内拼接都是可以的。下面是一些基本的操作方法,学过数据库的一眼就能看懂。

  • readtable 读入一个文件,创建table对象
  • writetable普通函数,把table写入一个文件,内部调用write类方法,把table写入一个文件
  • size 返回table的高和宽,表头不计
  • width 返回table的宽
  • height返回table的高
  • ndims 返回table的维度
  • numel 返回table高和宽的乘积
  • horcat 横向串接table
  • vercat 纵向串接table
  • intersect 返回两表中的相同的行
  • ismember查询表中的行是否在另一表中也出现
  • setdiff 查询两表之间的差异
  • unique 返回的表中没有相同的行
  • sextor 两个集合交集的非
  • union 两个集合的并
  • join 自然连接
  • innterjoin内连接
  • outerjoin 外连接
  • summary 返回table的基本信息
  • sortrows 给table按照制定的row排序
  • stack把table的各列摞成一列
  • unstack 把table的某一列展开成为若干列
  • ismissing找到table中那些没有赋值的项,返回logical index
  • standizeMissing 给未赋值项赋默认值
  • varfun把函数作用在table中选定的变量上
  • rowfun 把函数作用在table的每列上

tip:
1、建议使用matlab菜单栏中自带的导入数据按钮,再生成代码,就省了不少事了。
2、“错误使用 table/joinUtil (line 121)
3、由继承机制,对矩阵值的选取操作对table也是可行的。比如table0(3:5,2:end)等等。