京公网安备 11010802034615号
经营许可证编号:京B2-20210330
R中的apply族函数
如果计算涉及到 一个单一的向量,而结果也是一个向量 , tapply函数 是一个可选项,不同于aggregate函数,它返回一个向量或数组,这使得其单个元素很容易被访问。
将组定义为矩阵的行或列,即操作目标为矩阵的每一列或行时, apply函数 时最佳选择。该函数通常会返回一个向量或数组,但根据行或列操作的结果维度不同,将返回一个列表。
将组定义为列表中的元素。 如果组已经形成列表元素,那么 sapply或lapply函数 比较适合,它们的区别是lapply返回一个列表,而sapply可将输出简化为向量或数组。有时可以结合使用split函数,将需要处理的数据创建为一个列表,然后再使用这两个函数。
如果所要计算函数的参数为一个矩阵或数组, 可以考虑使用 mapply函数 ,该函数非常的灵活和简单,其返回的结果一般是列表形式。
先来看一下tapply()、apply()、lapply()、sapply()和mapply()函数的 语法规则:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
apply(X, MARGIN, FUN, ...)
lapply(X, FUN, ...)
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE,
USE.NAMES = TRUE)
根据不同的函数,输入数据X可能是向量、数组、矩阵或数据框;INDEX一般为类别变量;MARGIN指定矩阵的维度,1表示矩阵的行,2表示矩阵的列;FUN为参与运算的函数,可以是R自带的函数也可以是自己编写的函数;...为函数FUN指定的参数,紧跟在函数的后面。
接下来看一下各个函数的应用情况
为了处理基于一个或多个分组变量的单个向量,可以使用tapply函数, 该函数返回一个数组,其维数与分组向量的维数相同 。
注意,该函数的输入数据必须是向量,且分析向量与分组向量的长度必须一致
如果想分析iris数据集中Sepal.Length在各个花种中的最大值,可以通过tapply函数实现,这里的Sepal.Length和Species为两个向量,且各自的长度均相等。
如果想对某个变量(向量)进行多变量的分组分析时,也可以采用tapply函数。
首先构造一个数据框:
接下来想对z变量做分组统计,分组变量为x和y
这里的NA表示x和y的分组中没有对应的z值。
当数据具备 数组 的特性,可通过 apply函数对数据的每个维度进行运算 ,该函数需要 三个参数 :需要计算的 数组、运算维度的索引号和使用的函数。
标准化一个矩阵:这里可以直接给参数FUN为scale
当然,如果想统计各个列的均值,为比较显式循环和apply的隐式循环,程序如下,就可以比较出两种方式的效率:
\
结果显式,通过apply计算矩阵列的均值速度是显式循环的50倍。这说明在R中使用循环的话尽量使用到隐式的向量化计算,否则计算效率非常差。
再来看一个如何使用自编函数应用到apply中:这里显式了前7列的统计量值。
lapply()函数和sapply()函数把一个列表或向量作为其第一个参数,再把需要应用到每个列表元素的函数作为它的第二个参数。 其实它也应用到了循环,是一种隐式的循环,对列表的每一个元素做同样的函数计算。
应用:查看字符向量中每一个元素所包含的单词个数
使用sapply函数的另一个重要问题涉及到数据框。当数据框被视为列表时,数据框的每一列看着独立的列表元素。
查看数据集iris和ChickWeight各个字段的模式和类
通过以上的应用,可以提取满足特定条件的数据框的列
接下来使用自编函数加入到sapply函数中,实现循环。该自编函数的目的是计算出1000个100*5的矩阵中最大相关系数的均值。 这里很关键的一点是给自编函数传一个虚拟参数i用来循环。
最后再来看一下mapply函数的应用:该函数的第一个参数为指定的函数,第二个参数为指定函数的参数。如果根据某种正则表达式将一个字符向量的对应特征取出来,例如取出'qaws1few4g'中的'1f'和'4g'
最后总结一下:
tapply()的被分析对象必须且只能是向量
apply()的被分析对象必须且只能是矩阵或数组
sapply()的被分析对象必须且只能是向量或列表
lapply()的被分析对象必须且只能是向量或列表
mapply()的被分析对象必须是函数
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 定义: 用户增长核心分析框架,刻画用户从接触产品到自发推荐的全生命周期,五个递进环节构建 ...
2026-09-15在数字化营销与精细化用户运营时代,企业传统的广撒网式营销模式成本高、转化率低,已无法适配精准商业竞争需求。客户画像作为大 ...
2026-09-15 很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度” ...
2026-09-15在MySQL数据库数据查询与数据分析中,GROUP BY与ORDER BY是使用频率极高的核心关键字。二者语法结构相似,常搭配使用,但核心功 ...
2026-09-14随着数字化治理、智慧运营、数字孪生技术的普及,数字体征成为衡量业务状态、系统运行、城市治理与企业经营健康度的核心体系。数 ...
2026-09-14 很多数据分析师沉迷于复杂的模型和算法,却忽略了数据分析的一项基础能力——描述性统计。事实上,大量商业分析问题,用描述 ...
2026-09-14在MySQL数据库运维与开发实践中,经常出现一种典型现象:数据库实际存储的数据量很小,数据表条数少、文件体积低,但服务器整体 ...
2026-09-11 很多数据分析师能熟练计算均值、标准差,但当被问到“总体和样本有什么区别”“参数和统计量有什么关系”“数据级别的高低如 ...
2026-09-11CDA数据分析师 出品 作者:李诗怡 定义: 将同一时间段内因具备相同属性或共同经历的用户划分为群体,分析其留存与生命周期价值 ...
2026-09-11在零售、商超、餐饮、线下门店等实体商业运营中,客流与销售额是衡量门店经营状态的两大核心指标。销售额是门店经营的最终结果, ...
2026-09-10在数据可视化体系中,柱形图是最基础、应用最广泛的图表类型,其中**累计柱形图(堆积柱状图)**是兼顾整体总量与内部结构的核心 ...
2026-09-10 许多数据分析师精通Excel函数和SQL查询,但当面对一张上万行的销售明细表,要快速回答“哪个地区销量最高”“哪款产品增长最 ...
2026-09-10在Python Pandas数据分析中,DataFrame是承载结构化数据的核心载体,数据清洗、数据修正、条件赋值、字段更新等实操场景,都离不 ...
2026-09-09 很多数据分析师掌握了Excel函数、会写SQL查询,但当被问到“数据从哪里来”“数据加工有哪些步骤”“如何使用分析工具连接数 ...
2026-09-09卡方检验(Chi-Square Test)是统计学中针对分类数据的经典显著性检验方法,核心用于判断两个离散分类变量是否相互独立、数据实 ...
2026-09-09CDA数据分析师 出品 作者:李诗怡 1. 销售漏斗阶段判断 题目:销售漏斗模型中,通过广告、社交媒体等方式触达品牌信息(如浏览品 ...
2026-09-07在Python数据分析中,Pandas库的DataFrame是最核心、最常用的结构化数据表对象,类似于Excel的二维表格,具备规整的行列结构、字 ...
2026-09-07在数据分析、经营复盘、业绩预测与经济统计工作中,平均增速(平均增长率)是衡量数据长期变化趋势、业务发展快慢的核心指标。不 ...
2026-09-07 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-09-07随着大数据技术的快速发展,商业竞争逐步从传统的经验式经营转变为数据驱动的精细化运营。海量的用户行为数据、交易数据、运营数 ...
2026-09-04