groupfilter
语法
描述
表数据
数组的数据
例子
过滤双变量表
创建一个包含两个变量的表。
groupID = [1 1 1 2 2 3]';样本= [3 1 2 9 8 5]';T = table(groupID,sample)
T =6×2表groupID sample _______ ______ 1 3 1 1 1 2 2 9 2 8 3 5
按ID号分组,并返回与具有两个以上样本的组对应的行。
Gnumel = groupfilter(T,“groupID”,@(x) number (x) > 2)
Gnumel =3×2表groupID sample _______ ______ 1 3 1 1 1 1 2
返回组样本在0到6之间的行。
Gvals = groupfilter(T,“groupID”,@(x) min(x) > 0 && max(x) < 6)
Gvals =4×2表groupID sample _______ ______ 1 3 1 1 1 2 3
按最大值分组
创建一个包含表示天数和温度的两个变量的表。
Daynum = [1 1 1 2 2 2 2]';Temp = [67 65 71 55 61 79 58 78]';T =表(daynum,temp)
T =8×2表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表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]);利润= [2032 3071 1185 2587 1998 2899 3112 909 2619]';T = table(时间戳,利润)
T =9×2表时间戳利润___________ ______ 04- 03 -2017 2032 02- 03 -2017 3071 15- 03 -2017 1185 10- april -2017 2587 14- april -2017 1998 30- april -2017 2899 25-May-2017 3112 29-May-2017 909 21-May-2017 2619
将日期按月份分组,并返回与该月最大利润对应的行。
Gmax = groupfilter(T,“时间戳”,“月”,@(x) x == max(x))
Gmax =3×3表timeStamps利润month_timeStamps ___________ ______ ________________ 02-Mar-2017 3071 Mar-2017 30- april -2017 2899 april -2017 25-May-2017 3112 May-2017
返回每月平均利润大于2300美元的行。
Gavg = groupfilter(T,“时间戳”,“月”,@(x) mean(x) > 2300)
Gavg =3×3表timeStamps利润month_timeStamps ___________ ______ ________________ 10- april -2017 2587 april -2017 14- april -2017 1998 april -2017 30- april -2017 2899 april -2017
过滤三变量表
创建表T
其中包含9个人的信息。
groupID = [1 2 3 1 2 3 1 2 3]';Height = [62 61 59 66 70 72 57 67 71]';健康状态=分类([“穷”;“好”;“公平”;“穷”;“公平”;“优秀”;“穷”;“优秀”;“公平”]);T = table(groupID,Height,HealthStatus)
T =9×3表groupID Height HealthStatus _______ ______ ____________ 1 62 Poor 2 61 Good 3 59 Fair 1 66 Poor 2 70 Fair 3 72 Excellent 1 57 Poor 2 67 Excellent 3 71 Fair
根据ID号分组,并返回仅包含最低高度为60的成员的组的行。
G1 = groupfilter(T,“groupID”,@(x) min(x) >= 60,“高度”)
G1 =3×3表groupID Height HealthStatus _______ ______ ____________ 2 61 Good 2 70 Fair 2 67 Excellent
按ID号分组,并返回仅包含健康状况状态为的成员的组的行可怜的
.
G2 = groupfilter(T,“groupID”,@(x) all(x ==“穷”),“HealthStatus”)
G2 =3×3表groupID Height HealthStatus _______ ______ ____________ 1 62 Poor 1 66 Poor 1 57 Poor
矢量数据滤波
创建日期向量和相应利润值向量。
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]);利润= [2032 3071 1185 2587 1998 2899 3112 909 2619 3085]';
分组,并计算每个组的最大利润。显示最大利润及其对应的组。
[maxDailyProfit,dayOfWeek] = groupfilter(利润,时间戳,...“dayname”,@(x) x == max(x))
maxDailyProfit =5×13071 1185 2899 3112 2619
dayOfWeek =5 x1分类星期四星期三星期五星期六星期二
输入参数
T
- - - - - -输入表
表格|时间表
输入表,指定为表或时间表。
一个
- - - - - -输入数组
列向量|矩阵
输入数组,指定为列向量或存储为矩阵的列向量组。
groupvars
- - - - - -将变量或向量分组
标量|向量|矩阵|单元阵列|模式|函数处理|表格vartype
下标
对变量或向量进行分组,指定为以下选项之一:
对于数组输入数据,
groupvars
可以是行数相同的列向量一个
或排列在矩阵或单元格数组中的一组列向量。对于表格或时间表输入数据,
groupvars
指示使用哪些变量来计算数据中的组。您可以使用此表中的任何选项指定分组变量。索引方案 例子 变量名:
字符串、字符向量或单元格数组
一个
模式
对象
“一个”
或“一个”
—变量名为一个
(“A”、“B”)
或{' A ', ' B '}
-两个变量命名为一个
而且B
“Var”+ digitsPattern (1)
—变量名为“Var”
后面跟着一个数字
变量指数:
指变量在表中的位置的索引号
一个数字向量
一个逻辑向量。通常,这个向量的长度与变量的数量相同,但可以省略尾随
0
或假
值
3.
-表中的第三个变量3 [2]
-表中的第二个和第三个变量[假假真]
-第三个变量
功能处理:
接受表变量作为输入并返回逻辑标量的函数句柄
@isnumeric
—所有包含数值的变量
变量类型:
一个
vartype
下标,用于选择指定类型的变量
vartype(数字)
—所有包含数值的变量
例子:groupfilter (T“Var3”方法)
方法
- - - - - -过滤方法
函数处理
过滤方法,指定为函数句柄。
方法
定义用于从每个组中过滤成员的函数。该函数必须返回一个逻辑标量或逻辑列向量,其行数与指示选择哪个组成员的输入数据相同。
如果函数返回逻辑标量,则过滤掉该组的所有成员(当值为
假
)或不过滤(当值为真正的
).如果函数返回逻辑向量,则当对应的元素为时,将过滤出组的成员
假
,当对应的元素为时,则保留成员真正的
.
要定义函数句柄,请使用表单的语法@ mymethod (inputargs)
,在那里mymethod
取决于inputargs
.
函数可以过滤符合条件的组对应的行。例如,
@(x) mean(x) >
只将组的平均值大于10的组对应的行传递给输出。函数可以在相应的组中筛选满足条件的行。例如,
@(x) x == max(x)
仅传递给输出与其组中行的最大值相对应的行。
当groupfilter
将该方法同时应用于多个非分组变量,该方法将为每个变量返回一个逻辑标量或向量。对于每一行,所有返回的标量或向量中的对应值必须为真正的
将行传递给输出。
groupbins
- - - - - -装箱计划
“没有”
(默认)|标量|向量|单元阵列
分箱方案,指定为以下选项之一:
“没有”
,表示没有垃圾箱二进制边的列表,指定为数值向量或
datetime
向量为datetime
将变量或向量分组指定为正整数标量的箱的数量
一种时间持续时间,指定为类型的标量
持续时间
或calendarDuration
,表示bin宽度(对于datetime
或持续时间
仅分组变量或向量)列出每个分组变量或向量的分箱方法的单元格数组
一个时间箱
datetime
而且持续时间
只对变量或向量进行分组,指定为这些字符串之一。价值 描述 数据类型 “第二”
每个箱子是1秒。
datetime
而且持续时间
“一分钟”
每个箱子是1分钟。
datetime
而且持续时间
“小时”
每个箱子是1小时。
datetime
而且持续时间
“天”
每个箱子是一个日历日。这个值考虑了夏令时的变化。
datetime
而且持续时间
“周”
每个箱子是一个日历周。 datetime
只有“月”
每个箱子是一个日历月。 datetime
只有“季”
每个箱子是一个日历季度。 datetime
只有“年”
每个箱子是一个日历年。这个值表示闰日。
datetime
而且持续时间
“十年”
每个箱子是10年(10个日历年)。 datetime
只有“世纪”
每个箱子代表一个世纪(100日历年)。 datetime
只有“secondofminute”
箱子从0秒到59秒。
datetime
只有“minuteofhour”
箱子是0到59的分钟。
datetime
只有“hourofday”
箱子的单位是从0到23。
datetime
只有“dayofweek”
箱子是从1号到7号。一周的第一天是星期天。
datetime
只有“dayname”
bin是完整的日期名称,例如 “星期天”
.datetime
只有“dayofmonth”
箱子是从1到31的天。 datetime
只有“dayofyear”
箱是从1到366。 datetime
只有“weekofmonth”
箱子是从1到6的星期。 datetime
只有“weekofyear”
箱子是从1到54的周。 datetime
只有“monthname”
bin是完整的月份名称,例如 “1月”
.datetime
只有“monthofyear”
箱子是从1到12的月份。
datetime
只有“quarterofyear”
箱子是从1到4的四分之一。 datetime
只有
当指定多个分组变量或向量时,可以提供一个应用于所有分组变量或向量的分箱方法,或者为每个分组变量或向量提供包含分箱方法的单元格数组,例如{"none",[0 2 4 Inf]}
.
datavars
- - - - - -要操作的表变量
标量|向量|单元阵列|模式|函数处理|表格vartype
下标
要操作的表变量,指定为此表中的选项之一。datavars
指示要对输入表或时间表的哪些变量应用过滤方法。未指定的其他变量datavars
在不被操作的情况下传递到输出。groupfilter
将筛选方法应用于指定的变量,并使用结果从所有变量中删除行。当datavars
未指定,groupfilter
对每个非分组变量进行操作。
索引方案 | 例子 |
---|---|
变量名:
|
|
变量指数:
|
|
功能处理:
|
|
变量类型:
|
|
例子:groupfilter(T,groupvars,method,["Var1" "Var2" "Var4"])
LR
- - - - - -包含箱边
“左”
(默认)|“正确”
包含的bin边,指定为任意一个“左”
或“正确”
,表示包含bin间隔的哪一端。
此参数仅当groupbins
指定后,该值应用于所有分组变量或向量的所有分组方案。
输出参数
G
-输出表
表|时间表
输出表用于表或时间表输入数据,作为表或时间表返回。G
中的行T
满足分组过滤方法。
B
-输出数组
向量|矩阵
用于数组输入数据的输出数组,作为向量或矩阵返回。B
中的行一个
满足分组过滤方法。
BG
-向量分组
列向量|单元格列向量数组
数组输入数据的向量分组,返回为列向量或列向量的单元格数组。BG
中的行对应的唯一分组向量或分组向量组合B
.
扩展功能
高大的数组
使用行数超过内存容量的数组进行计算。
使用注意事项和限制:
如果
一个
而且groupvars
都是高矩阵,那么它们必须有相同的行数。如果第一个输入是一个高矩阵,那么
groupvars
可以是包含高分组向量的单元格数组。的
groupvars
而且datavars
参数不支持函数句柄。万博1manbetx的
方法
参数必须是的有效输入splitapply
在高阵列上操作。当按离散的datetime数组分组时,分类组名称与内存中的不同
groupfilter
计算。
有关更多信息,请参见高大的数组.
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
不支持稀疏输入。万博1manbetx
不支持datetime或duration数据万博1manbetx的分箱方案。
不支持包含多维数组的输入表。万博1manbetx
计算方法必须是不变的。
当第一个输入参数是一个表时,分组变量必须是常量。
数据变量必须为常数。
指定为字符向量或字符串的分箱方案必须为常量。
名称-值参数必须为常量。
计算方法不能返回稀疏或多维结果。
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。万博1manbetx有关更多信息,请参见在线程环境中运行MATLAB函数.
版本历史
R2019b引入R2022b:代码生成支持万博1manbetx
的C或c++代码groupfilter
函数。有关使用说明和限制,请参见C/ c++代码生成.
R2022a:在较小的团队规模下提高性能
的groupfilter
函数显示了改进的性能,特别是当每组中的数据计数较小时。
例如,这段代码按组筛选一个包含500个组的矩阵,每个组的计数为10。该代码比前一个版本快了大约2.32倍。
函数timingGroupfilter data = (1:5000)';Groups = repelem(1:length(data)/10,10)';P = randperm(长度(数据));数据=数据(p);Groups = Groups (p);抽搐为G = groupfilter(data,groups,@(x) x == max(x));结束toc结束
大致的执行时间为:
R2021b:2.32秒
R2022a:1.00秒
代码是在Windows上计时的®10日,英特尔®至强®CPU E5-1650 v4 @ 3.60 GHz测试系统调用timingGroupfilter
函数。
另请参阅
功能
实时编辑任务
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。