splitapply

将数据拆分为组并应用功能

描述

例子

y = scletapply(funXG拆分X进入指定的团体G并应用该功能fun对每个小组。splitapply回报y作为包含连接的输出的数组fun对于分裂出来的群体X.输入论点G是正整数的矢量,它指定相应元素的组X属于。如果G包含价值观,splitapply省略相应的值X当它分裂时X进入群组。去创造G,你可以使用findgroups.功能。

splitapply结合两个步骤Split-Apply-Combine工作流

例子

y = scletapply(funXN, X1,…G拆分X1,…,XN进入团体并适用fun.这splitapply函数调用fun每组一次,用对应的元素X1,…,XN作为N输入参数到fun

例子

y = scletapply(funT.G分裂表的变量T.进入团体并适用fun.这splitapply功能处理变量T.如向量、矩阵或单元格数组,这取决于表变量的数据类型。如果T.具有N变量,然后fun必须接受N输入参数。

例子

(日元…那yM] = splitapply(___将变量分成组并适用fun对每个小组。fun返回多个输出参数。Y1,...,YM包含来自的连接输出fun用于从输入数据变量中分离出来的组。fun可以返回属于不同类别的输出参数,但每个输出的类每次都必须相同fun被称为。您可以将此语法与前面语法的任何输入参数一起使用。

来自的输出参数的数量fun不必与输入参数的数量不一样X1,…,XN

例子

全部折叠

按性别计算患者组的平均身高并显示结果。

从数据文件中加载患者的身高和性别patients.mat

加载病人谁是性别高度
名称大小字节类属性性别100x1 11412单元格高100x1 800双倍

按性别指定组findgroups.

G = findgroups(性别);

分裂高度进入指定的团体G.按性别计算平均身高。输出参数的第一行是女性患者的平均身高,第二行是男性患者的平均身高。

splitapply(@均值,高度,g)
ans =2×165.1509 - 69.2340

计算患者组血压读数差异的差异,并显示结果。血压读数包含在两个数据变量中。要计算差异,请使用具有两个输入参数的函数。

从数据文件中载入100名患者的血压读数和吸烟数据patients.mat

加载病人谁是收缩系统舒张压吸烟者
名称大小字节类属性舒张100x1 800双吸烟者100x1 100逻辑收缩压100x1 800双

定义fun作为一个函数,计算吸烟者和非吸烟者的收缩压和舒张压读数之间的差异。fun需要两个输入参数。

Func = @(x,y)var(x-y);

使用findgroups.splitapply将患者资料分组,并计算差异的方差。findgroups.中也返回组标识符吸烟者.这splitapply函数调用fun每组一次,与收缩系统舒张压作为两个输入参数。

[g,吸烟者] = findgroups(吸烟者);varbp = splitapply(Func,收缩,舒张,g)
varbp =2×144.4459 - 48.6783

创建一个包含差异差异的表,每个组的患者数量。

numpatients = splitapply(@ numel,吸烟者,g);T =表(吸烟者,Numpatients,Varbp)
t =2×3表吸烟者Numpatiants varbp _______ ________________ ______假66 44.446 TRUE 34 48.678

计算患者组的最小、中值和最大权重,并将这些结果作为每组的数组返回。splitapply串联输出参数,以便您可以将输出与其他组的输出区分开来。

定义返回作为行向量的最小值,中位数和最大值的函数。

Mystats = @(x)[min(x) median(x) max(x)];

把病人的体重,性别,以及吸烟者的身份patients.mat

加载病人谁是重量性别吸烟者
名称大小字节类属性性别100x1 11412 Cell吸烟者100x1 100逻辑重量100x1 800双倍

使用findgroups.splitapply将患者权重分成组并计算每个组的统计数据。

G = findgroups(性别、吸烟);Y = splitapply (mystats、重量、G)
y =4×3111.0000 131.0000 147.0000 115.0000 131.0000 146.0000 158.0000 181.5000 194.0000 164.0000 181.0000 202.0000

在本例中,可以将非标量输出作为行向量返回,因为数据和分组变量是列向量。每一行的y包含不同组患者的统计数据。

计算患者数据表的平均体重指数(BMI)。将患者通过性别和地位作为吸烟者或不吸烟者进行分组。

加载患者数据并将变量分组到表中。

加载病人DT =表(身高、体重);GT =表(性别、吸烟);

定义从组或患者的权重和高度计算均值BMI的函数。

= @(h,w)mean((w ./ (h.^2)) * 703);

创建一个表,其中包含每个组的均值BMI。

[G,结果]= findgroups (GT);meanBMI = splitapply (meanBMIFcn, DT, G);结果。meanBMI = meanBMI
结果=4×3表性别吸烟者meanBMI  __________ ______ _______ {' 女性的}假21.672{‘女性’}真21.669{‘男性’}假26.578{‘男性’}真26.458

计算患者组的最小,平均值和最大高度,并在表格中返回结果。

在名为multiStats.m它接受一个输入向量并返回该向量的最小值、平均值和最大值。

The MathWorks, Inc.版权所有函数[lo,avg,hi] = multiastats(x)lo = min(x);avg =均值(x);hi = max(x);结尾

将患者数据加载到表中。

加载病人T =表(性别、身高);总结(T)
变量:性别:100x1 Cell字符矢量高度:100x1双值:Min 60中位数67 Max 72

组患者高度按性别。创建包含输出的表multiStats为每个组。

(G,性别)= findgroups (T.Gender);[minHeight、meanHeight maxHeight] = splitapply (@multiStats, T.Height, G);结果=表(性别、minHeight meanHeight maxHeight)
结果= 2 x4表性别minHeight meanHeight maxHeight  __________ _________ __________ _________ {' 女性的60 70 - 65.151{‘男性’}}66 69.234 72

输入参数

全部折叠

函数应用于指定为函数句柄的数据组。

如果fun返回非卡拉尔输出参数,然后参数必须定向为此splitapply可以将输出参数从连续呼叫连接到fun.例如,如果输入数据变量是列向量,则fun必须将标量或行矢量返回为输出参数。

例子:y = scletapply(@ sum,x,g)返回数据组的总和X

数据变量,指定为向量,矩阵或单元格数组。元素X属于相应元素指定的组G

如果X是一个矩阵,splitapply将每一列或每一行视为单独的数据变量。的方向G确定是否splitapply对待列或行X作为数据变量。

分组数,指定为正整数的向量。

  • 如果X然后是矢量或单元格数组G必须和X

  • 如果X是一个矩阵,那么长度G必须等于列或行的数量X,取决于G

  • 如果输入参数是tableT., 然后G一定是列向量。的长度G必须等于行的行数T.

数据变量,指定为一个表。splitapply将每个表变量视为单独的数据变量。

更多关于

全部折叠

Split-Apply-Combine工作流

分裂申请结合工作流程在数据分析中很常见。在此工作流程中,分析师将数据拆分为组,将函数应用于每个组,并结合结果。该图显示了工作流的典型示例和由此实现的工作流的部分findgroups.splitapply

扩展能力

在R2015B中介绍