R|apply,tapply
时间:2022-07-22
本文章向大家介绍R|apply,tapply,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
apply族功能强大,实用,可以代替很多循环语句,先简单介绍apply和tapply函数。
一、apply()函数
apply函数可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。使用格式如下:
apply(x, MARGIN, FUN, ...)
其中x为数据对象,MARGIN是维度的下标,FUN是由你指定的函数,而...则包括了任何想传递给FUN的参数。在矩阵或数据框中, MARGIN=1表示行, MARGIN=2表示列。
示例如下:
set.seed(100)mydata <- matrix(rnorm(30), nrow=6) #生成随机数mydata [,1] [,2] [,3] [,4] [,5]
[1,] -0.50219235 -0.58179068 -0.20163395 -0.9138142 -0.8143791
[2,] 0.13153117 0.71453271 0.73984050 2.3102968 -0.4384506
[3,] -0.07891709 -0.82525943 0.12337950 -0.4380900 -0.7202216
[4,] 0.88678481 -0.35986213 -0.02931671 0.7640606 0.2309445
[5,] 0.11697127 0.08988614 -0.38885425 0.2619613 -1.1577295
[6,] 0.31863009 0.09627446 0.51085626 0.7734046 0.2470760
利用apply求均值
apply(mydata, 2, mean)[1] 0.1454680 -0.1443698 0.1257119 0.4596365 -0.4421267apply(mydata, 2, mean, trim=0.2) #去掉端值[1] 0.1220539 -0.1888731 0.1008213 0.3403341 -0.4355267
注:FUN可为任意R函数,这也包括你自行编写的函数。
二、tapply()函数
tapply()函数可根据因子、向量和要计算的函数计算,使用格式如下:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
其中X通常是一向量;INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;FUN是需要计算的函数;simplify是逻辑变量,若取值为TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。
示例如下:
Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose","David Jones", "Janice Markhammer", "Cheryl Cushing","Reuven Ytzrhak", "Greg Knox", "Joel England","Mary Rayburn")Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)roster <- data.frame(Student, Math, English,stringsAsFactors=FALSE)
roster$grade[roster$Math <= 500] <- "A"roster$grade[roster$Math > 500] <- "B"
roster Student Math English grade John Davis 502 25 B Angela Williams 600 22 B Bullwinkle Moose 412 18 A David Jones 358 15 A Janice Markhammer 495 20 A Cheryl Cushing 512 28 B Reuven Ytzrhak 410 15 A Greg Knox 625 30 B Joel England 573 27 B Mary Rayburn 522 18 B
1)应用前面的apply求数学和英语的平均分
apply(roster[,c(2,3)],2,mean)Math English 500.9 21.8
2)当需要分组计算时候,使用tapply函数
tapply(roster[,"English"], roster[,"grade"], mean) A B 17 25
注:当index不是因子时,可以用as.factor()把参数强制转换成因子
3)aggregate函数同样可以得到类似的结果:
aggregate(x=roster[c('English')], by = list(roster$grade), FUN=mean)
4)实现类似excel的透视表功能
attach(roster)tapply(English,list(Student,grade),mean) A BAngela Williams NA 22Bullwinkle Moose 18 NACheryl Cushing NA 28David Jones 15 NAGreg Knox NA 30Janice Markhammer 20 NAJoel England NA 27John Davis NA 25Mary Rayburn NA 18Reuven Ytzrhak 15 NA
以上,apply,tapply可以省去很多循环的分析,其他apply族函数,待续。。。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- React Native布局详细指南
- 走进Golang之Context的使用
- 「Workshop」第十一期:降维
- 开始在 GitHub 上写博客
- 微信公众号菜单点击发送天气预报
- SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段
- 通过注册表调整 Windows 8 窗口边框宽度
- 在 Mac OS X 中创建和使用内存盘
- Mono for Android 下的 ListActivity
- 使用JavaScript Function.prototype进行代码重构的一些例子
- Activity 生命周期及其栈管理方式
- 如何操作SAP UI5应用Footer区域工具栏按钮的背景颜色
- 我的第一个 Mono for Android 应用
- 【DB笔试面试851】在Oracle中,造成“ORA-28040: No matching ...”错误的原因是什么?
- 在 Silverlight 5 项目中使用 async/await