【MATLAB】关于matlab的table数据使用

前言

上一次的训练中一道数据处理的题目,五千来号数据,作为matlab新手这怎么搞,后面发现可以导入,但是问题来了,我根本提取不出那些数据啊(苦恼)。后面发现这些数据从excel导入进去后是table类型的,然后去找了相关资料,终于有点会使了,于是记录整理一下,下次忘了还可以再看看,嘻嘻~

table简介

MATLAB引入了这个新的数据类型,为的就是更好的用来做统计,就可以理解成一个表(类似统计 工具箱中的dataset),可以存放各种类型的容器。第一行就作为表头,如果取的表头符合matlab的命名规则,那么该列直接如此命名。

数据导入

1.通过导入数据构造table对象

我们可以使用readtable 函数,构造一个新的table对象,把csv文件中的数据导入到该对象中。readtable函数接受文件名称作为输入,返回一个table对象。

% 通过readtable函数来构造table对象
>> nasdaq = readtable('xxxx.csv')
Warning: Variable names were modified to make them valid MATLAB identifiers. 
nasdaq =                                                                
    Symbol             Name              MarketCap     IPOYear
    ______    _______________________    __________    _______
    'AAPL'    'Apple Inc'                '$742.63B'    1980   
    'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
    'MSFT'    'Microsoft Corporation'    '$346.9B'     1986   

ps:warning 的原因是该列表把第一行作为了表头,缩了空格,修改了表头

调用table构造函数来构造table对象

我们还可以通过直接调用table类的构造函数来创建table对象。
上栗子

下面程序中第1,2行用元胞数组来表示表中每一列的数据,第3行规定了表头的名称,第4行调用table的构造函数创建table对象,先输入数据,再输入表头的名称。表头通过table对象的VariableNames属性来设置。

name={'Abby';'Bob';'Charlie'};                        % 3x1列向量
number={'5086470001';'5086470002';'5086470003'};      % 3x1列向量
colName={'Name','Number'};
phonetable=table(name,number,'VariableNames',colName) 

通过转换函数构造table对象

除了使用table的构造函数来创建table对象,还可以使用转换函数把其它数据类型转成table,下列通过数组数据类型类构造table。下面的程序的1-2行,我们利用financial工具箱中的fetch函数,从Yahoo财经处得到雅虎从3月1日到3月10日的股票价格,fetch函数将返回一个数组,第3行我们利用array2table转换函数把得到数组转成table。

% 通过array2table创建table对象  
conn = yahoo;
array = fetch(conn,'YHOO','3/1/2015','3/10/2015');
yhoo = array2table(array,...
  'VariableNames', {'date','open','high','low','closing','volumn','adjusted'})

访问table中的数据

理解这个的最好方式就是栗子:

通过表Table.1所建立的table对象,在命令行中显示如下:
(以访问这个table为例)

% nasdaq table在命令行中的显示
nasdaq = 
    Symbol             Name              MarketCap     IPOYear
    ______    _______________________    __________    _______

    'AAPL'    'Apple Inc'                '$742.63B'    1980   
    'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
    'MSFT'    'Microsoft Corporation'    '$346.9B'     1986    

1.我们可以通过使用dot+Variablename的语法直接访问table中的列,返回的结果是cell格式的数据:

% 使用dot语法访问table中的数据
>> nasdaq.Symbol           % dot格式+变量名的访问方式
ans = 
    'AAPL'
    'AMZN'
    'MSFT'
>> class(nasdaq)           % 返回cell格式的数据
ans =
cell  
%table类重载了subsref函数,于是支持MATLAB传统的圆括号下标访问,如果要访问第一行,则:
% 使用下标语法访问table中的数据
>> nasdaq(1,:)
ans = 
    Symbol       Name        MarketCap     IPOYear
    ______    ___________    __________    _______

    'AAPL'    'Apple Inc'    '$742.63B'    1980     

2.使用圆括号,返回的结果仍然是table,如果要访问第2到3行,则:

% 使用下标语法访问table中的数据
>> nasdaq(2:3,:)
ans = 
    Symbol             Name              MarketCap     IPOYear
    ______    _______________________    __________    _______

    'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
    'MSFT'    'Microsoft Corporation'    '$346.9B'     1986     

返回的结果仍然是table。
3.table数据结构支持MATLAB传统的花括号下标访问,返回的结果是cell格式的数据

% 花括号下标访问
>> nasdaq{:,1}   % 花括号下标访问,返回第一列中的数据
ans = 
    'AAPL'
    'AMZN'
    'MSFT' 
还可以把Dot语法和下标语法结合起来获取数据,下例代码访问table第一列的第三行,返回的结果是元胞。
% Dot语法和圆括号下标访问结合
>> nasdaq.Symbol(3)
ans = 
    'MSFT'
>> class(ans)     % 圆括号下标访问,返回结果是元胞 
ans =
cell  

(这个图还挺有用的)
图Figure.1中以表Table.1中的数据为例,总结了几种访问table中不同区域的数据的方法。
Figure.1 访问table中的数据

在这里插入图片描述

参考网址:https://www.ilovematlab.cn/article-52-1.html

### 回答1: 你可以使用`join`函数来找到两个table中相同的数据,具体步骤如下: 1. 使用`unique`函数获取第一个table中唯一的数据,并将其存储到变量A中,例如: ``` A = unique(table1); ``` 2. 使用`unique`函数获取第二个table中唯一的数据,并将其存储到变量B中,例如: ``` B = unique(table2); ``` 3. 使用`join`函数将A和B中相同的数据连接起来,例如: ``` C = join(A,B); ``` 这将会返回一个新的table,其中只包含A和B中相同的数据。 注意:`join`函数默认使用内连接,即只会返回A和B中同时存在的数据。如果需要返回A和B中所有的数据,可以使用`outerjoin`函数。 ### 回答2: 在MATLAB中,可以使用`ismember`函数来寻找两个表格之间相同的数据。 首先,我们将两个表格加载到MATLAB工作区。假设表格1为`table1`,表格2为`table2`。 然后,我们可以使用`ismember`函数来寻找两个表格之间的相同数据。该函数的语法如下: ```matlab [C,ia,ib] = ismember(A,B) ``` 其中,`A`和`B`是待比较的两个数组,`C`是一个逻辑数组,表示`A`中的每个元素在`B`中是否存在。`ia`和`ib`分别是`A`和`B`中相同元素的索引。 对于表格1和表格2,如果我们想要找到相同的数据,可以将表格转换为数组,并执行以下操作: ```matlab array1 = table2array(table1); array2 = table2array(table2); [C,ia,ib] = ismember(array1,array2); ``` 最后,我们可以使用`ia`和`ib`来获取相同数据在表格1和表格2中的位置,或者使用`C`来获取逻辑数组表示相同数据的存在。 以上就是使用MATLAB寻找两个表格相同数据的方法。 ### 回答3: 在MATLAB中,我们可以使用内置函数`ismember`来寻找两个table中相同的数据。 `ismember`函数用于判断一个数组或矩阵的元素是否在另一个数组或矩阵中,并返回一个逻辑数组,表示元素是否存在于目标数组中。 为了在两个table中找到相同的数据,我们可以选择一个table作为目标数组,并在另一个table使用`ismember`函数进行查找。下面是一个简单的例子: ```MATLAB % 创建两个table table1 = table([1; 2; 3], {'A'; 'B'; 'C'}, 'VariableNames', {'ID', 'Name'}); table2 = table([2; 3; 4], {'B'; 'C'; 'D'}, 'VariableNames', {'ID', 'Name'}); % 在table2中查找与table1相同的数据 logical_array = ismember(table2.ID, table1.ID) & ismember(table2.Name, table1.Name); matching_data = table2(logical_array, :); % 显示匹配的数据 matching_data ``` 在上面的例子中,我们创建了两个table:`table1`和`table2`。然后,我们使用`ismember`函数分别在`table2.ID`和`table2.Name`中查找与`table1`相同的数据。最后,我们将逻辑数组中值为`true`的行提取出来,得到相同的数据。 通过以上步骤,我们可以在MATLAB中寻找两个table的相同数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值