このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
groupfilter
グループによるフィルター処理
構文
説明
は、G
= groupfilter(T
,groupvars
,method
)method
の計算に従って table または timetable のデータをフィルター処理し、groupvars
で指定されたグループ化変数の一意の組み合わせによりグループ化します。引数 method
は、それぞれの非グループ化変数を処理する関数ハンドルです。出力 G
は、method
の条件を満たす T
の行のみを含む table または timetable です。たとえば、G = groupfilter(T,'Trial',@(x) numel(x) > 5)
は、T
のデータを Trial
別にグループ化し、試行数が 5 を超えるグループに属する行を保持します。
例
2 変数テーブルのフィルター処理
2 変数を含む table を作成します。
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
ID 番号でグループ化し、サンプル数が 2 を超えるグループに対応する行のみを返します。
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
最大値でのグループ化
日番号と温度を表す 2 変数を含む table を作成します。
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
日番号でグループ化し、それぞれの日の最も高い温度 2 値を返します。
G = groupfilter(T,'daynum',@(x) ismember(x,maxk(x,2)))
G=4×2 table
daynum temp
______ ____
1 67
1 71
2 79
2 78
月でのグループ化
日付と、それに対応する利益の table を作成します。
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
3 変数テーブルのフィルター処理
3 変数を含む table を作成します。
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"
ID 番号でグループ化し、グループ メンバーすべての身長が 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"
ID 番号と性別でグループ化し、各グループで男性と女性の最大身長を含む行を返します。
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
入力引数
T
— 入力データ
table | timetable
入力データ。table または timetable として指定します。
A
— 入力配列
ベクトル | 行列
入力配列。ベクトルまたは行列として指定します。
groupvars
— グループ化変数またはベクトル
スカラー | ベクトル | 行列 | cell 配列 | 関数ハンドル | table vartype
添字
グループ化変数またはベクトル。次のオプションのいずれかとして指定します。
配列入力の場合、
groupvars
はA
と同じ行数をもつ列ベクトルか、行列内あるいは cell 配列内に配置した列ベクトルのグループのいずれかにすることができます。入力データが table または timetable の場合、
groupvars
はデータ内のグループの計算にどの変数を使用するかを表します。グループ化変数は、次の表のオプションのいずれかを使用して指定できます。オプション 説明 例 変数名 単一の table 変数名を指定する文字ベクトルまたはスカラー string
'Var1'
"Var1"
変数名のベクトル 各要素が table 変数名である、文字ベクトルの cell 配列または string 配列
{'Var1' 'Var2'}
["Var1" "Var2"]
変数インデックスのスカラーまたはベクトル table 変数インデックスのスカラーまたはベクトル
1
[1 3 5]
logical ベクトル 各要素が table 変数に対応する logical ベクトル。
true
の場合は対応する変数を含めて、false
の場合は対応する変数を除外します。[true false true]
関数ハンドル 入力として table 変数をとり、logical スカラーを返す関数ハンドル
@isnumeric
vartype
添字関数
vartype
によって生成される table の添字vartype('numeric')
例: groupfilter(T,"Var3",method)
method
— 計算方法
関数ハンドル
計算方法。関数ハンドルとして指定します。
method
は、各グループからメンバーをフィルターで除外するために使用される関数を定義します。この関数は、logical スカラーを返すか、入力データと同じ行数をもち、選択するグループ メンバーを示す logical 列ベクトルを返さなければなりません。関数が logical スカラーを返す場合、グループのすべてのメンバーがフィルターで除外されるか (値が false
のとき)、何も除外されません (値が true
のとき)。関数が logical ベクトルを返す場合、対応する要素が false
であるグループ メンバーがフィルターで除外されます。対応する要素が true
であるメンバーが保持されます。
関数ハンドルを定義するには、@(inputargs) myfunc
の形式の構文を使用します。ここで myfunc
は inputargs
に依存します。たとえば、@(x) mean(x)
は、変数 x
を関数 mean
の入力引数として指定します。次に、@(x) mean(x) > 10
のようにフィルター処理の条件を定義できます。これは logical スカラーを返します。この計算は、10 を超える平均をもつグループの行を保持します。詳細については、関数ハンドルの作成と無名関数を参照してください。
groupfilter
が一度に複数の非グループ化変数を適用する場合、行を保持するために、メソッドは各変数について true
を返さなければなりません。
groupbins
— ビン化スキーム
'none'
(既定値) | 文字ベクトル | スカラー | ベクトル | cell 配列
ビン化スキーム。次のオプションのいずれかとして指定します。
ビン化しないことを示す
'none'
数値ベクトルまたは
datetime
ベクトル (datetime
グループ化変数の場合) として指定されるビン エッジのリスト整数値スカラーとして指定されるビン数
ビンの幅を示す
duration
型またはcalendarDuration
型のスカラーとして指定される時間範囲 (datetime
またはduration
グループ化変数の場合のみ)各グループ化変数のビン化ルールをリストする cell 配列
次のいずれかの文字ベクトルとして指定される時間ビン (
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'
各ビンは 10 年 (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
のみ
複数のグループ化変数を指定する場合、すべてのグループ化変数に適用される 1 つのビン化ルールを指定するか、グループ化変数ごとのビン化メソッドが格納された cell 配列 ({'none',[0 2 4 Inf]}
など) を指定することができます。
LR
— 含めるビン エッジ
'left'
(既定値) | 'right'
含めるビン エッジ。'left'
または 'right'
のいずれかとして指定し、ビン区間のどちらの端が含まれるかを示します。
この引数は、groupbins
が指定され、かつその値によりすべてのグループ化変数またはグループ化ベクトルにすべてのビン化スキームが適用される場合にのみ指定できます。
datavars
— 演算の対象とする table 変数
スカラー | ベクトル | cell 配列 | 関数ハンドル | table vartype
添字
演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。datavars
は、フィルター方法を適用する入力 table または timetable の変数を示します。datavars
で指定されていない table 内のその他の変数は、演算されずに出力に渡されます。groupfilter
はフィルター方法を指定した変数に適用し、その結果を使用してすべての変数から行を削除します。datavars
が指定されない場合、groupfilter
はそれぞれの非グループ化変数を処理します。
オプション | 説明 | 例 |
---|---|---|
変数名 | 単一の table 変数名を指定する文字ベクトルまたはスカラー string |
|
変数名のベクトル | 各要素が table 変数名である、文字ベクトルの cell 配列または string 配列 |
|
変数インデックスのスカラーまたはベクトル | table 変数インデックスのスカラーまたはベクトル |
|
logical ベクトル | 各要素が table 変数に対応する logical ベクトル。 |
|
関数ハンドル | 入力として table 変数をとり、logical スカラーを返す関数ハンドル |
|
vartype 添字 | 関数 |
|
例: groupfilter(T,groupvars,method,["Var1" "Var2" "Var4"])
出力引数
G
— 出力テーブル
table | timetable
出力 table。フィルター処理されていないデータの行を含む table または timetable として返されます。
B
— 出力配列
ベクトル | 行列
出力配列。フィルター処理されていないデータを含むベクトルまたは行列として返されます。
BG
— グループ化ベクトル
列ベクトル | 列ベクトルの cell 配列
配列の入力データのグループ化ベクトル。列ベクトル、または列ベクトルの cell 配列として返されます。BG
は、A
のフィルター処理されていない行に対応するグループ化ベクトルの行を含みます。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
A
とgroupvars
が両方とも tall 行列の場合、その行数は同じでなければなりません。最初の入力が tall 行列の場合、
groupvars
を tall グループ化ベクトルを含む cell 配列にすることができます。引数
groupvars
と引数datavars
は関数ハンドルをサポートしていません。引数
method
は、tall 配列を扱うsplitapply
の有効な入力でなければなりません。離散化された datetime 配列によってグループ化する場合、カテゴリのグループ名はインメモリ
groupfilter
計算と比べ異なっています。
詳細については、tall 配列を参照してください。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2019b で導入R2022a: グループ サイズが小さい場合のパフォーマンスが向上
関数 groupfilter
は、特に各グループのデータ数が少ない場合に、パフォーマンスが向上しています。
参考
groupsummary
| groupcounts
| grouptransform
| findgroups
| splitapply
| discretize
| varfun
| rowfun
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)