groupfilter

Фильтрация по группам

Описание

пример

G = groupfilter(T,groupvars,method) фильтрует данные в таблице или расписании в соответствии с расчетами в method, группировка по уникальным комбинациям сгруппированных переменных, заданная в groupvars. The method аргумент является указателем на функцию, который работает с каждой переменной, не входящей в группу. Область выхода G - таблица или расписание, содержащее только строки T которые удовлетворяют условию в method. Для примера, G = groupfilter(T,'Trial',@(x) numel(x) > 5) группирует данные в T по Trial, сохранение строк, которые относятся к группам с более чем пятью испытаниями.

пример

G = groupfilter(T,groupvars,groupbins,method) помещает данные в соответствии с groupbins перед применением фильтра горизонтальное сцепление групп с таблицей выхода. Для примера, G = groupfilter(T,'SaleDate','year',@(x) numel(x) > 5) помещает данные в SaleDate по годам и сохраняет строки, чей интервал имеет более пяти элементов.

пример

G = groupfilter(___,datavars) задает табличные переменные для применения фильтра к любому из предыдущих синтаксисов. Для примера, G = groupfilter(T,'Trial',@(x) x == max(x),'Height') сохраняет строки T соответствует максимальной высоте для каждого испытания.

G = groupfilter(___,'IncludedEdge',LR) определяет включенную границу интервала следующим 'left' или 'right' указать, какой конец интервала интервала содержащий. Можно использовать 'IncludeEdge' с любым предыдущим синтаксисом, который задает groupbins.

B = groupfilter(A,groupvars,method) фильтрует данные согласно уникальным комбинациям сгруппированных векторов в groupvars когда A является вектором или матрицей. groupvars может быть вектором-столбцом, матрицей или массивом ячеек векторов-столбцов. Область выхода B - матрица, содержащая строки A которые удовлетворяют условию, определяемому method.

пример

B = groupfilter(A,groupvars,groupbins,method) помещает данные в соответствии с groupbins.

B = groupfilter(A,groupvars,groupbins,method,'IncludedEdge',LR) определяет, включать ли левое или правое ребро в каждый интервал, когда groupbins задан.

пример

[B,BG] = groupfilter(A,___) также возвращает строки векторов группировки, соответствующих нефильтрованным строкам в A.

Примеры

свернуть все

Составьте таблицу, содержащую две переменные.

groupID = [1 1 1 2 2 3]';
sample = [3 1 2 9 8 5]';
T = table(groupID,sample)
T=6×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   
       2         9   
       2         8   
       3         5   

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

Gnumel = groupfilter(T,'groupID',@(x) numel(x) > 2)
Gnumel=3×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   

Возвращает только строки, групповые выборки которых находятся в диапазоне от 0 до 6.

Gvals = groupfilter(T,'groupID',@(x) min(x) > 0 && max(x) < 6)
Gvals=4×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   
       3         5   

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

daynum = [1 1 1 1 2 2 2 2]';
temp = [67 65 71 55 61 79 58 78]';
T = table(daynum,temp)
T=8×2 table
    daynum    temp
    ______    ____

      1        67 
      1        65 
      1        71 
      1        55 
      2        61 
      2        79 
      2        58 
      2        78 

Сгруппируйте по номеру дня и возвращайте наибольшие две температуры для каждого дня.

G = groupfilter(T,'daynum',@(x) ismember(x,maxk(x,2)))
G=4×2 table
    daynum    temp
    ______    ____

      1        67 
      1        71 
      2        79 
      2        78 

Составьте таблицу дат и соответствующей прибыли.

timeStamps = datetime([2017 3 4; 2017 3 2; 2017 3 15; 2017 4 10;...
                       2017 4 14; 2017 4 30; 2017 5 25;...
                       2017 5 29; 2017 5 21]);
profit = [2032 3071 1185 2587 1998 2899 3112 909 2619]';
T = table(timeStamps,profit)
T=9×2 table
    timeStamps     profit
    ___________    ______

    04-Mar-2017     2032 
    02-Mar-2017     3071 
    15-Mar-2017     1185 
    10-Apr-2017     2587 
    14-Apr-2017     1998 
    30-Apr-2017     2899 
    25-May-2017     3112 
    29-May-2017      909 
    21-May-2017     2619 

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

Gmax = groupfilter(T,'timeStamps','month',@(x) x == max(x))
Gmax=3×3 table
    timeStamps     profit    month_timeStamps
    ___________    ______    ________________

    02-Mar-2017     3071         Mar-2017    
    30-Apr-2017     2899         Apr-2017    
    25-May-2017     3112         May-2017    

Строки возврата, чей месяц имел среднюю прибыль, превышающую $2300.

Gavg = groupfilter(T,'timeStamps','month',@(x) mean(x) > 2300)
Gavg=3×3 table
    timeStamps     profit    month_timeStamps
    ___________    ______    ________________

    10-Apr-2017     2587         Apr-2017    
    14-Apr-2017     1998         Apr-2017    
    30-Apr-2017     2899         Apr-2017    

Составьте таблицу, содержащую три переменные.

groupID = [1 2 3 1 2 3 1 2 3]';
height = [62 61 59 66 70 72 57 67 71]';
gender = ["M" "F" "F" "M" "M" "F" "M" "M" "M"]';
T = table(groupID,height,gender)
T=9×3 table
    groupID    height    gender
    _______    ______    ______

       1         62       "M"  
       2         61       "F"  
       3         59       "F"  
       1         66       "M"  
       2         70       "M"  
       3         72       "F"  
       1         57       "M"  
       2         67       "M"  
       3         71       "M"  

Сгруппировать по идентификационному номеру и возвращаемым строкам, представители которых имеют минимальную высоту 60.

G1 = groupfilter(T,'groupID',@(x) min(x) >= 60,'height')
G1=3×3 table
    groupID    height    gender
    _______    ______    ______

       2         61       "F"  
       2         70       "M"  
       2         67       "M"  

Возвращает строки, представители группы которых являются мужчинами.

G2 = groupfilter(T,'groupID',@(x) all(x == "M"),'gender')
G2=3×3 table
    groupID    height    gender
    _______    ______    ______

       1         62       "M"  
       1         66       "M"  
       1         57       "M"  

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

G3 = groupfilter(T,{'groupID','gender'},@(x) x == max(x))
G3=5×3 table
    groupID    height    gender
    _______    ______    ______

       2         61       "F"  
       1         66       "M"  
       2         70       "M"  
       3         72       "F"  
       3         71       "M"  

Создайте вектор дат и вектор соответствующих значений прибыли.

timeStamps = datetime([2017 3 4; 2017 3 2; 2017 3 15; 2017 3 10; ...
                       2017 3 14; 2017 3 31; 2017 3 25; ...
                       2017 3 29; 2017 3 21; 2017 3 18]);
profit = [2032 3071 1185 2587 1998 2899 3112 909 2619 3085]';

Группируйте по дням недели и вычисляйте максимальную прибыль для каждой группы. Отображение максимальной прибыли и соответствующих групп.

[maxDailyProfit,dayOfWeek] = groupfilter(profit,timeStamps,'dayname',@(x) x == max(x))
maxDailyProfit = 5×1

        3071
        1185
        2899
        3112
        2619

dayOfWeek = 5x1 categorical
     Thursday 
     Wednesday 
     Friday 
     Saturday 
     Tuesday 

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

свернуть все

Входные данные, заданные как таблица или расписание.

Входной массив, заданный как вектор или матрица.

Сгруппированные переменные или векторов, заданная как одна из следующих опций:

  • Для входа массива, groupvars может быть либо вектором-столбцом с одинаковым числом строк, как A или группу векторов-столбцов, расположенных в матрице или массиве ячеек.

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

    ОпцияОписаниеПримеры
    Имя переменной

    Вектор символов или скалярная строка, задающая имя табличной переменной

    'Var1'

    "Var1"

    Вектор имен переменных

    Массив ячеек из векторов символов или строковых массивов, где каждый элемент является именем табличной переменной

    {'Var1' 'Var2'}

    ["Var1" "Var2"]

    Скаляр или вектор переменных индексов

    Скаляр или вектор табличных переменных

    1

    [1 3 5]

    Логический вектор

    Логический вектор, элементы которого каждый соответствуют табличной переменной, где true включает соответствующую переменную и false исключает его

    [true false true]

    Указатель на функцию

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

    @isnumeric

    vartype индекс

    Индекс таблицы, сгенерированный vartype функция

    vartype('numeric')

Пример: groupfilter(T,"Var3",method)

Метод расчета, заданный как указатель на функцию.

method определяет функцию, используемую для фильтрации представителей из каждой группы. Функция должна вернуть логический скаляр или логический вектор-столбец с одинаковым числом строк, как и входные данные, указывающие, какие представители группы выбрать. Если функция возвращает логический скаляр, либо все представители группы отфильтровываются (когда значение false) или ни один не отфильтрован (когда значение true). Если функция возвращает логический вектор, представители групп отфильтровываются, когда соответствующий элемент false. Представители сохраняются, когда соответствующий элемент true.

Чтобы определить указатель на функцию, используйте синтаксис формы @(inputargs) myfunc где myfunc зависит от inputargs. Для примера, @(x) mean(x) определяет переменную x как входной параметр к mean функция. Затем можно задать условие, по которому фильтровать, например @(x) mean(x) > 10, который возвращает логический скаляр. Этот расчет хранит строки, чья группа имеет среднее значение больше 10. Для получения дополнительной информации смотрите Создание указателя на функцию и Анонимные функции.

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

Схема раскладывания, заданная как один из следующих опций:

  • 'none', что указывает на отсутствие раскладывание

  • Список границ интервала, заданный в виде числового вектора или datetime вектор для datetime сгруппированные переменные

  • Количество интервалов, заданное как целочисленный скаляр

  • Длительность, заданная как скаляр типа duration или calendarDuration, с указанием ширины интервала (для datetime или duration сгруппированные переменные)

  • Массив ячеек, в котором перечислены правила раскладывания для каждой сгруппированной переменной

  • Временной интервал для datetime и duration сгруппированные переменные, заданная как один из следующих векторов символов:

    ЗначениеОписаниеТип данных
    'second'

    Каждый интервал занимает 1 секунду.

    datetime и duration
    'minute'

    Каждый интервал - 1 минута.

    datetime и duration
    'hour'

    Каждый интервал - 1 час.

    datetime и duration
    'day'

    Каждый интервал занимает 1 календарный день. Это значение учетов летнего времени сдвигов экономии времени.

    datetime и duration
    'week'Каждый интервал занимает 1 календарную неделю.datetime только
    'month'Каждый интервал занимает 1 календарный месяц.datetime только
    'quarter'Каждый интервал составляет 1 календарный квартал.datetime только
    'year'

    Для каждого интервала используется 1 календарный год. Это значение учитывает високосные дни.

    datetime и duration
    'decade'Каждый интервал составляет 1 декаду (10 календарных лет).datetime только
    'century'Каждый интервал составляет 1 век (100 календарных лет).datetime только
    'secondofminute'

    Интервалы указаны в секундах от 0 до 59.

    datetime только
    'minuteofhour'

    Интервалы указаны в минутах от 0 до 59.

    datetime только
    'hourofday'

    Интервалы - это часы от 0 до 23.

    datetime только
    'dayofweek'

    Интервалы - это дни от 1 до 7. Первый день недели - воскресенье.

    datetime только
    'dayname'Интервалы - это имена полных дней, такие как 'Sunday'.datetime только
    'dayofmonth'Интервалы - это дни от 1 до 31.datetime только
    'dayofyear'Интервалы - это дни от 1 до 366.datetime только
    'weekofmonth'Интервалов - это недели от 1 до 6.datetime только
    'weekofyear'Интервалов от 1 до 54 недель.datetime только
    'monthname'Интервалы - это полные имена месяцев, такие как 'January'.datetime только
    'monthofyear'

    Интервалы от 1 до 12 месяцев.

    datetime только
    'quarterofyear'Интервалы представляют собой четверти от 1 до 4.datetime только

Когда задано несколько сгруппированных переменных, можно задать одно правило раскладывания, которое применяется ко всем сгруппированным переменным, или массив ячеек, содержащий метод раскладывания для каждой сгруппированной переменной, такой как {'none',[0 2 4 Inf]}.

Включённая граница интервала, заданный как 'left' или 'right', указание, какой конец интервала интервала содержащий.

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

Табличные переменные для работы, заданные как один из опций в этой таблице. datavars указывает, к каким переменным таблицы входа или timetable применять методы фильтрации. Другие переменные в таблице, не заданные datavars пройти к выходу без работы. groupfilter применяет методы фильтрации к заданным переменным и использует результаты, чтобы удалить строки из всех переменных. Когда datavars не задан, groupfilter действует с каждой переменной, не входящей в группу.

ОпцияОписаниеПримеры
Имя переменной

Вектор символов или скалярная строка, задающая имя табличной переменной

'Var1'

"Var1"

Вектор имен переменных

Массив ячеек из векторов символов или строковых массивов, где каждый элемент является именем табличной переменной

{'Var1' 'Var2'}

["Var1" "Var2"]

Скаляр или вектор переменных индексов

Скаляр или вектор табличных переменных

1

[1 3 5]

Логический вектор

Логический вектор, элементы которого каждый соответствуют табличной переменной, где true включает соответствующую переменную и false исключает его

[true false true]

Указатель на функцию

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

@isnumeric

vartype индекс

Индекс таблицы, сгенерированный vartype функция

vartype('numeric')

Пример: groupfilter(T,groupvars,method,["Var1" "Var2" "Var4"])

Выходные аргументы

свернуть все

Выходная таблица, возвращенная как таблица или расписание, содержащее нефильтрованные строки данных.

Выходной массив, возвращенный как вектор или матрица, содержащая нефильтрованные данные.

Группировка векторов для входных данных массива, возвращенная как вектор-столбец или массив ячеек векторов-столбцов. BG содержит строки векторов группировки, соответствующих нефильтрованным строкам в A.

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

Введенный в R2019b