tapply用于分组的循环计算,通过INDEX参数可以把数据集X进行分组,相当于group by的操作。
函数定义:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
参数列表:
X: 向量
INDEX: 用于分组的索引
FUN: 自定义的调用函数
…: 接收多个数据
simplify : 是否数组化,当值array时,输出结果按数组进行分组
比如,计算不同品种的鸢尾花的花瓣(iris)长度的均值。
> tapply(iris$Petal.Length,iris$Species,mean)
setosa versicolor virginica
1.462 4.260 5.552
对向量x和y进行计算,并以向量t为索引进行分组,求和。
> set.seed(1)
> x<-y<-1:10;x;y
[1] 1 2 3 4 5 6 7 8 9 10
[1] 1 2 3 4 5 6 7 8 9 10
> t<-round(runif(10,1,100)%%2);t
[1] 1 2 2 1 1 2 1 0 1 1
> tapply(x,t,sum)
0 1 2
8 36 11
由于tapply只接收一个向量参考,通过’…’可以把再传给你FUN其他的参数,那么我们想去y向量也进行求和,把y作为tapply的第4个参数进行计算。
> tapply(x,t,sum,y)
0 1 2
63 91 66
得到的结果并不符合我们的预期,结果不是把x和y对应的t分组后求和,而是得到了其他的结果。第4个参数y传入sum时,并不是按照循环一个一个传进去的,而是每次传了完整的向量数据,那么再执行sum时sum(y)=55,所以对于t=0时,x=8 再加上y=55,最后计算结果为63。那么,我们在使用’…’去传入其他的参数的时候,一定要看清楚传递过程的描述,才不会出现的算法上的错误。
R语言apply、lapply、sapply、tspply函数
在描述性统计量方面,R语言提供了数不胜数的选择,这里主要讲apply、lapply、sapply、tspply函数的用法和区别。这四者的基本用法非常相似,都是对的行或者列执行同样的运算,如:mean, sum, sd, var, min, max等,但是针对的数据对象和输出的结果方面有一定的差别。
1、apply
对矩阵、数据框、数组(二维、多维)等矩阵型数据,按行或列应用函数FUN进行循环计算,并以返回计算结果。如果是数据集是数据框,那么系统会将其转为矩阵,但是如果所有列不是数字类型或者类型不一致,将会导致转换失败,那么appl
apply家族函数的使用
对数据集进行操作的时候,我们经常需要写循环操作,比如对于矩阵的每一列计算它的平均值等等,而R语言的向量化操作可以节省非常多循环的代码。所以说在R语言里面,当你要写循环的时候,一定要对自己先说三遍,不写循环!不写循环!不写循环!因为apply()函数就是代替循环写法的一系列非常好用的函数,各式各样批量化的操作都不在话下。之前写过的dplyr包完整指南也是批量操作的一个神器。不过对于普通数据集apply系列的家庭成员们已经完全可以搞定了~下面举例说一下函数的具体用法
1.apply
apply()`可以应用于Pandas中的Series和DataFrame对象。在Series对象上,`apply()`将会对Series中的每个元素应用指定的函数并返回一个新的Series对象;在DataFrame对象上,`apply()`将会对每一行或者每一列应用指定的函数并返回一个新的DataFrame对象。
obj.call(thisObj,arg[,arg2[,arg3[,...agr]]]);
thisObj继承obj的属性和方法(obj原型链上的属性和方法不能被继承),后面的参数会当成obj的参数安装顺序传递进去。
function animal(type,nickname){
this.type = type;
this.nickname = nickname;
this.sayHello = function(){
return 'h
python apply函数的具体含义如下:
apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数。args是一个包含将要提供给函数的按位置传递的参数的元组。如果省略了args,任何参数都不会被传递,kwargs是一个包含关键字参数的字典。
apply()的返回值就是func()的返回值,apply()的元素参数是有序的,元素的顺序必须和func()形式参数的顺序一致
二、使用示例:
下面给几个例子来详细的说明一下apply的用法:
1、假设是执行没有带参数的方法:
def say():
apply(x, MARGIN, FUN, ...)
其中,x为数据对象,MARGIN是维度的下标,FUN是由你指定的函 数,而...则包括了任何想传递给FUN的参数。在矩阵或数据框 中,MARGIN=1表示行,MARGIN=2表示列。请看以下例子。
#求矩阵每一行或者每一列的均值,可以使用apply()函数
mydata<-matrix(rnorm(30),nrow=6)#生成服从正态.
R语言的循环效率并不高,所以并不推荐循环以及循环嵌套。为了实现循环功能的情况下,兼顾效率,R语言提供了`apply`系列函数,用于对规则的数据进行函数式的迭代处理。
在R语言中,apply系列函数的基本作用是对数组(array,可以是多维)或者列表(list)按照元素或元素构成的子集合进行迭代,并将当前元素或子集合作为参数调用某个指定函数。apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。apply族函数分别有apply函数,tapply函数,lapp
apply 的简单用法指南R中的apply族函数是一组R向量化函数,允许通过数组执行复杂的任务,避免使用for循环。R中的apply() 功能apply可用于数组、矩阵或数据框。apply...
原标题:R语言向量化运算:apply函数族用法心得作者:鲁伟,热爱数据,坚信数据技术和代码改变世界。R语言和Python的忠实拥趸,为成为一名未来的数据科学家而奋斗终生。个人公众号:数据科学家养成记 (微信ID:louwill12)当初入坑R语言的时候,就在各种场合看到老司机的忠告,“尽量避免使用循环!”一开始并不明白这其中的奥义,直到后来对R语言有深入接触后,才领会R语言在向量化运算方面的强大功...
R语言有很重要的apply族函数:lapply sapply apply tapply mapply。这些函数底层通过C实现,效率比手工遍历高效。apply族函数是高效能计算的运算向量化(Vectorization)实现方法之一,比起传统的for,while常常能获得更好的性能。
1. apply 对matrix指定维度操作
###1. apply 对matrix指定维度操作
x <- cbind(x1 = 3, x2 = c(4:1, 2:5),x3= c(1:8))
dimnames(x)
lapply( )不仅适用于向量,也适用于列表。假设我们有一份学生列表:
现在,我们想创建一个字符向量,其中每个元素都具有如下形式:
James, 25 year-old man, loves reading, writing.
函数 sprintf( )通过将占位符(例如:%s 对应字符串,%d 对应整数)替换为相应的输入参数来格式化文本。举个例子:
输出结果:
[1] “Hello, Tom! Your numbe
使用R做数据处理时,基本不需要用循环,而且效率特别低,所以就衍生出来apply族函数代替循环计算。
apply的家族函数,包括apply, sapply, tapply, mapply, lapply, rapply, vapply, eapply等。我们可以实现对数据的循环、分组、过滤、类型控制等操作。
下面将分别介绍这8个函数的定义和使用方法
1、apply
apply函数是最常用的代替for...