Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

findgroups

查找组并返回组编号

说明

示例

G = findgroups(A) 返回 G,它是从分组变量 A 生成的组编号的向量。输出参数 G 包含从 1 到 N 的整数值,指示 AN 个唯一值的 N 个不同组。例如,如果 A{'b','a','a','b'},则 findgroups 返回 G[2 1 1 2]。您可以使用 G 拆分来自其他变量的数据组。使用 G 作为 拆分-应用-合并工作流splitapply 的输入参数。

findgroupsA 中的空字符向量和 NaNNaT 以及未定义的分类值视为缺失值,并返回 NaN 作为 G 的对应元素。

示例

G = findgroups(A1,...,AN) 根据 A1,...,AN 生成组编号。findgroups 函数将组定义为 A1,...,AN 中唯一的值组合。例如,如果 A1{'a','a','b','b'}A2[0 1 0 0],则 findgroups(A1,A2) 返回 G[1 2 3 3],因为组合 'b' 0 出现两次。

示例

[G,ID] = findgroups(A) 还会在 ID 中返回每个组的唯一值。例如,如果 A{'b','a','a','b'},则 findgroups 返回 G[2 1 1 2],并返回 ID{'a','b'}。参数 AID 具有相同的数据类型,但不需要具有相同的大小。

示例

[G,ID1,...,IDN] = findgroups(A1,...,AN) 还返回 ID1,...,IDN 中每个组的唯一值。ID1,...,IDN 中的值定义各组。例如,如果 A1{'a','a','b','b'}A2[0 1 0 0],则 findgroups(A1,A2) 返回 G[1 2 3 3],并返回 ID1ID2{'a','a','b'}[0 1 0]

示例

G = findgroups(T) 返回 G,它是从表 T 中的变量生成的组编号的向量。findgroups 函数将 T 中的所有变量视为分组变量。

示例

[G,TID] = findgroups(T) 还返回一个表 TID,其中包含每个组的唯一值。TID 包含 T 的所有变量中唯一的值组合。TTID 中的变量具有相同的名称,但这些表不需要具有相同的行数。

示例

全部折叠

使用组编号将患者的身高测量值按性别划分为各组。然后,计算每个组的平均身高。

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

load patients
whos Gender Height
  Name          Size            Bytes  Class     Attributes

  Gender      100x1             11412  cell                
  Height      100x1               800  double              

使用 findgroups 按性别分组。

G = findgroups(Gender);

GenderG 的前五个元素进行比较。其中 Gender 包含 'Female'G 包含 1。其中 Gender 包含 'Male'G 包含 2

Gender(1:5)
ans = 5x1 cell
    {'Male'  }
    {'Male'  }
    {'Female'}
    {'Female'}
    {'Female'}

G(1:5)
ans = 5×1

     2
     2
     1
     1
     1

使用 GHeight 变量划分为两个身高组。应用 mean 函数。这两个组分别包含女性和男性患者的平均身高。

splitapply(@mean,Height,G)
ans = 2×1

   65.1509
   69.2340

基于按性别及是否烟民分组的测量值,计算各患者组的平均血压。

从数据文件 patients.mat 加载患者的血压读数、性别和吸烟数据。

load patients
whos Systolic Diastolic Gender Smoker
  Name             Size            Bytes  Class      Attributes

  Diastolic      100x1               800  double               
  Gender         100x1             11412  cell                 
  Smoker         100x1               100  logical              
  Systolic       100x1               800  double               

使用有关患者的性别和吸烟信息指定各组。G 包含从一至四的整数,因为从 SmokerGender 有四个可能的值组合。

G = findgroups(Smoker,Gender);
G(1:10)
ans = 10×1

     4
     2
     1
     1
     1
     1
     3
     2
     2
     1

计算每个组的平均血压。

meanSystolic = splitapply(@mean,Systolic,G);
meanDiastolic = splitapply(@mean,Diastolic,G);
mBP = [meanSystolic,meanDiastolic]
mBP = 4×2

  119.4250   79.0500
  119.3462   79.8846
  129.0000   89.2308
  129.5714   90.3333

计算各患者组的身高中位数,将结果显示在表中。要定义患者组,请使用来自 findgroups 的其他输出参数。

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

load patients
whos Gender Height
  Name          Size            Bytes  Class     Attributes

  Gender      100x1             11412  cell                
  Height      100x1               800  double              

使用 findgroups 按性别分组。输出参数 gender 中的值定义 findgroups 在分组变量中找到的组。

[G,gender] = findgroups(Gender);

计算身高中位数。创建一个包含身高中位数的表。

medianHeight = splitapply(@median,Height,G);
T = table(gender,medianHeight)
T=2×2 table
      gender      medianHeight
    __________    ____________

    {'Female'}         65     
    {'Male'  }         69     

计算各患者组的平均血压,将结果显示在表中。要定义患者组,请使用来自 findgroups 的其他输出参数。

从数据文件 patients.mat 加载 100 位患者的血压读数、性别和吸烟数据。

load patients
whos Systolic Diastolic Gender Smoker
  Name             Size            Bytes  Class      Attributes

  Diastolic      100x1               800  double               
  Gender         100x1             11412  cell                 
  Smoker         100x1               100  logical              
  Systolic       100x1               800  double               

使用有关患者的性别和吸烟信息指定各组。计算每个组的平均血压。输出参数 gendersmoker 的值定义 findgroups 在分组变量中找到的组。

[G,gender,smoker] = findgroups(Gender,Smoker);
meanSystolic = splitapply(@mean,Systolic,G);
meanDiastolic = splitapply(@mean,Diastolic,G);

创建一个包含每组患者平均血压的表。

T = table(gender,smoker,meanSystolic,meanDiastolic)
T=4×4 table
      gender      smoker    meanSystolic    meanDiastolic
    __________    ______    ____________    _____________

    {'Female'}    false        119.42           79.05    
    {'Female'}    true            129          89.231    
    {'Male'  }    false        119.35          79.885    
    {'Male'  }    true         129.57          90.333    

使用表中的分组变量计算患者的平均血压。

将 100 位患者的性别和吸烟数据加载到一个表中。

load patients
T = table(Gender,Smoker);
T(1:5,:)
ans=5×2 table
      Gender      Smoker
    __________    ______

    {'Male'  }    true  
    {'Male'  }    false 
    {'Female'}    false 
    {'Female'}    false 
    {'Female'}    false 

使用 T 中的 GenderSmoker 变量指定各患者组。

G = findgroups(T);

根据数据变量 SystolicDiastolic 计算平均血压。

meanSystolic = splitapply(@mean,Systolic,G);
meanDiastolic = splitapply(@mean,Diastolic,G);
mBP = [meanSystolic,meanDiastolic]
mBP = 4×2

  119.4250   79.0500
  129.0000   89.2308
  119.3462   79.8846
  129.5714   90.3333

对于按性别及是否烟民分组的患者,创建一个包含平均血压值的表。

将患者的性别和吸烟数据加载到一个表中。

load patients
T = table(Gender,Smoker);

使用 T 中的 GenderSmoker 变量指定各患者组。输出表 TID 用于标识各组。

[G,TID] = findgroups(T);
TID
TID=4×2 table
      Gender      Smoker
    __________    ______

    {'Female'}    false 
    {'Female'}    true  
    {'Male'  }    false 
    {'Male'  }    true  

根据数据变量 SystolicDiastolic 计算平均血压。将平均血压追加到 TID

TID.meanSystolic = splitapply(@mean,Systolic,G);
TID.meanDiastolic = splitapply(@mean,Diastolic,G)
TID=4×4 table
      Gender      Smoker    meanSystolic    meanDiastolic
    __________    ______    ____________    _____________

    {'Female'}    false        119.42           79.05    
    {'Female'}    true            129          89.231    
    {'Male'  }    false        119.35          79.885    
    {'Male'  }    true         129.57          90.333    

输入参数

全部折叠

分组变量,指定为向量或字符向量元胞数组或字符串数组。A 中的唯一值标识各组。

如果 A 是向量,则它可以为数值类型或者数据类型 categoricalcalendarDurationdatetimedurationlogicalstring

分组变量,指定为表。findgroups 将每个表变量视为一个单独的分组变量。这些变量可以为数值类型或者数据类型 categoricalcalendarDurationdatetimedurationlogicalstring

输出参数

全部折叠

组编号,以正整数向量形式返回。对于分组变量中标识的 N 个组,介于 1 和 N 之间的每个整数指定一个组。其中任何分组变量都包含空字符向量或 NaNNaT 或未定义的分类值,G 中对应位置包含 NaN

  • 如果分组变量为向量,则 G 和分组变量都具有相同的大小。

  • 如果分组变量在一个表中,则 G 的长度等于该表的行数。

用于标识每个组的值,以向量或字符向量元胞数组形式返回。ID 的值是 A 的唯一值且经过排序。

用于标识每个组的唯一值,以表形式返回。TID 的变量具有来自 T 的对应变量的经过排序的唯一值。但是,TIDT 不需要具有相同的行数。

详细信息

全部折叠

拆分-应用-合并工作流

拆分-应用-合并工作流在数据分析中很常见。在此工作流中,分析过程首先将数据分组,再对每个组应用一个函数,然后合并结果。下图显示了该工作流的典型示例以及由 findgroupssplitapply 实现的工作流部分。

扩展功能

在 R2015b 中推出