splitapply

Разделите данные в группы и примените функцию

Описание

пример

Y = splitapply(func,X,G) разделения X в группы, заданные G и применяет функциональный func каждой группе. splitapply возвращает Y как массив, который содержит конкатенированные выходные параметры от func для разделения групп из X. Входной параметр G вектор положительных целых чисел, который задает группы к который соответствующие элементы X принадлежать. Если G содержит NaN значения, splitapply не использует соответствующие значения в X когда это разделяет X в группы. Создать G, можно использовать findgroups функция.

splitapply объединения два шага в рабочем процессе "Разделение-Применение-Объединение".

пример

Y = splitapply(func,X1,...,XN,G) разделения X1,...,XN в группы и применяет func. splitapply вызовы функции func однажды на группу, с соответствующими элементами от X1,...,XN как N входные параметры к func.

пример

Y = splitapply(func,T,G) переменные разделений таблицы T в группы и применяет func. splitapply функционируйте обрабатывает переменные T как векторы, матрицы или массивы ячеек, в зависимости от типов данных табличных переменных. Если T имеет N переменные, затем func должен принять N входные параметры.

пример

[Y1,...,YM] = splitapply(___) переменные разделений в группы и применяют func каждой группе. func возвращает несколько выходных аргументов. Y1,...,YM содержит конкатенированные выходные параметры от func для разделения групп из переменных входных данных. func может возвратить выходные аргументы, которые принадлежат различным классам, но класс каждого выхода должен быть тем же каждым разом func называется. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Количество выходных аргументов от func не должен совпадать с количеством входных параметров, заданных X1,...,XN.

Примеры

свернуть все

Вычислите средние высоты полом для групп пациентов и отобразите результаты.

Загрузите терпеливые высоты и полы из файла данных patients.mat.

load patients
whos Gender Height
  Name          Size            Bytes  Class     Attributes

  Gender      100x1             12212  cell                
  Height      100x1               800  double              

Задайте группы полом с findgroups.

G = findgroups(Gender);

Разделите Height в группы, заданные G. Вычислить среднюю высоту по полу. Первая строка выходного аргумента является средней высотой пациенток, и вторая строка является средней высотой штекерных пациентов.

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

   65.1509
   69.2340

Вычислите отклонения различий в показаниях кровяного давления для групп пациентов и отобразите результаты. Показания кровяного давления содержатся в двух переменных данных. Чтобы вычислить различия, используйте функцию, которая берет два входных параметра.

Загрузите показания кровяного давления и курение данных для 100 пациентов из файла данных patients.mat.

load patients
whos Systolic Diastolic Smoker
  Name             Size            Bytes  Class      Attributes

  Diastolic      100x1               800  double               
  Smoker         100x1               100  logical              
  Systolic       100x1               800  double               

Задайте func как функция, которая вычисляет отклонения различий между систолическими и диастолическими показаниями кровяного давления для курильщиков и некурящих. func требует двух входных параметров.

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

Используйте findgroups и splitapply разделить данные о пациентах в группы и вычислить отклонения различий. findgroups также возвращает идентификаторы группы в smokers. splitapply вызовы функции func однажды на группу, с Systolic и Diastolic как эти два входных параметра.

[G,smokers] = findgroups(Smoker);
varBP = splitapply(func,Systolic,Diastolic,G)
varBP = 2×1

   44.4459
   48.6783

Составьте таблицу, которая содержит отклонения различий с количеством пациентов в каждой группе.

numPatients = splitapply(@numel,Smoker,G);
T = table(smokers,numPatients,varBP)
T=2×3 table
    smokers    numPatients    varBP 
    _______    ___________    ______

     false         66         44.446
     true          34         48.678

Вычислите минимум, медиану и максимальные веса для групп пациентов и возвратите эти результаты как массивы для каждой группы. splitapply конкатенирует выходные аргументы так, чтобы можно было отличить выход для каждой группы от выхода для других групп.

Задайте функцию, которая возвращает минимум, медиану и максимум как вектор-строка.

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

Загрузите терпеливые веса, полы и состояние как курильщики от patients.mat.

load patients
whos Weight Gender Smoker
  Name          Size            Bytes  Class      Attributes

  Gender      100x1             12212  cell                 
  Smoker      100x1               100  logical              
  Weight      100x1               800  double               

Используйте findgroups и splitapply разделить терпеливые веса в группы и вычислить статистику для каждой группы.

G = findgroups(Gender,Smoker);
Y = splitapply(mystats,Weight,G)
Y = 4×3

  111.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) из таблиц данных о пациентах. Сгруппируйте пациентов полом и состоянием как курильщики или некурящие.

Загрузите данные о пациентах и сгруппированные переменные в таблицы.

load patients
DT = table(Height,Weight);
GT = table(Gender,Smoker);

Задайте функцию, которая вычисляет средний BMI от весов и высот групп или пациентов.

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

Составьте таблицу, которая содержит средний BMI для каждой группы.

[G,results] = findgroups(GT);
meanBMI = splitapply(meanBMIFcn,DT,G);
results.meanBMI = meanBMI
results=4×3 table
      Gender      Smoker    meanBMI
    __________    ______    _______

    {'Female'}    false     21.672 
    {'Female'}    true      21.669 
    {'Male'  }    false     26.578 
    {'Male'  }    true      26.458 

Вычислите минимум, среднее значение и максимальные высоты для групп пациентов и возвратите результаты в таблице.

Задайте функцию в файле с именем multiStats.m это принимает входной вектор и возвращает минимум, среднее значение и максимальные значения вектора.

% Copyright 2015 The MathWorks, Inc.

function [lo,avg,hi] = multiStats(x)
lo = min(x);
avg = mean(x);
hi = max(x);
end

Загрузите данные о пациентах в таблицу.

load patients
T = table(Gender,Height);
summary(T)
Variables:

    Gender: 100x1 cell array of character vectors

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

Высоты пациента группы полом. Составьте таблицу, которая содержит выходные параметры от multiStats для каждой группы.

[G,gender] = findgroups(T.Gender);
[minHeight,meanHeight,maxHeight] = splitapply(@multiStats,T.Height,G);
result = table(gender,minHeight,meanHeight,maxHeight)
result =

  2x4 table

      gender      minHeight    meanHeight    maxHeight
    __________    _________    __________    _________

    {'Female'}       60          65.151         70    
    {'Male'  }       66          69.234         72    

Входные параметры

свернуть все

Функция, чтобы примениться к группам данных, определенного функцией указателя.

Если func возвращает нескалярный выходной аргумент, затем аргумент должен быть ориентирован так, чтобы splitapply может конкатенировать выходные аргументы от последовательных вызовов до func. Например, если переменные входных данных являются вектор-столбцами, то func должен возвратить или скаляр или вектор-строку как выходной аргумент.

Пример: Y = splitapply(@sum,X,G) возвращает суммы групп данных в X.

Переменная данных, заданная как вектор, матрица или массив ячеек. Элементы X принадлежите группам, заданным соответствующими элементами G.

Если X матрица, splitapply обработки каждый столбец или строка как отдельная переменная данных. Ориентация G определяет ли splitapply обрабатывает столбцы или строки X как переменные данных.

Числа группы, заданные как вектор положительных целых чисел.

  • Если X векторный массив или массив ячеек, затем G должна быть та же длина как X.

  • Если X матрица, затем длина G должно быть равно количеству столбцов или строкам X, В зависимости от ориентации G.

  • Если входной параметр является таблицей T, затем G должен быть вектор-столбец. Длина G должно быть равно количеству строк T.

Переменные данных, заданные как таблица. splitapply обработки каждая табличная переменная как отдельная переменная данных.

Больше о

свернуть все

Рабочий процесс "разделение применяет объединение

Рабочий процесс "Разделение-Применение-Объединение" распространен в анализе данных. В этом рабочем процессе аналитик разделяет данные в группы, применяет функцию к каждой группе и комбинирует результаты. Схема показывает типичный пример рабочего процесса и части рабочего процесса, реализованного findgroups и splitapply.

Расширенные возможности

Введенный в R2015b