第5章--高级数据管理
5.1 数值和字符处理函数
常用的数学函数
统计函数
例子:
> x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949
默认情况下,函数scale()对矩阵或数据框的指定列进行均值为0、标准差为1的标准化:
newdata <- scale(mydata)
要对每一列进行任意均值和标准差的标准化,可以使用以下代码:
newdata <- scale(mydata)*SD + M
概率函数
概率函数通常用来生成特征已知的模拟数据,以及在用户编写的统计函数中计算概率值。
字符处理函数
其他实用函数
示例:
R函数可以应用到一系列的数据对象上,包括标量,向量,矩阵,数组和数据框。
> a <- 5 > sqrt(a) [1] 2.236068 > b <- c(1.243,5.654,2.99) > round(b) [1] 1 6 3 > c <- matrix(runif(12),nrow=3) > c[,1] [,2] [,3] [,4] [1,] 0.1994530 0.13714175 0.9197887 0.92626099 [2,] 0.1545716 0.05410748 0.7442934 0.20239342 [3,] 0.3898991 0.71826297 0.4518926 0.02659162
> log(c)
[,1] [,2] [,3] [,4]
[1,] -1.6121766 -1.9867402 -0.08361129 -0.07659924
[2,] -1.8670979 -2.9167828 -0.29531995 -1.59754183
[3,] -0.9418672 -0.3309195 -0.79431077 -3.62715915
> mean(c)
[1] 0.4103881
上面的mean函数是求整个矩阵的平均数,如果要分别求整行或者整列的平均数时,R提供了一个apply()函数,使用格式为:
apply(x, MARGIN, FUN,...)
MARGIN=1表示行,MARGIN=2表示列。
> mydata <- matrix(rnorm(30),nrow=6) > mydata[,1] [,2] [,3] [,4] [,5] [1,] 0.04888185 -1.6841123 0.20826767 -0.18079844 0.8770435 [2,] 2.24945461 -0.1110540 -0.88960378 -0.28632932 -1.9787470 [3,] -0.14309448 0.4394450 -0.04371930 -0.71101344 0.2028341 [4,] -0.90665601 -0.7176465 0.38136328 -0.06082567 -0.3844853 [5,] -0.40884645 -0.3192920 0.08476159 -0.47544146 0.1809374 [6,] 1.40852339 0.3653756 0.09148512 -1.06787472 1.0503215 > apply(mydata,1,mean) [1] -0.14614355 -0.20325589 -0.05110963 -0.33765005 -0.18757618 0.36956618 > apply(mydata,2,mean) [1] 0.374710485 -0.337880697 -0.027907572 -0.463713840 -0.008682649 > apply(mydata,2,mean,trim=0.2) [1] 0.22636608 -0.19565422 0.08519877 -0.41339566 0.21908240
apply()是一个很强大的函数,可以把函数应用到数组的某个维度上,而lapply()和sapply()则可将函数应用到列表上。
示例:将学生的各科考试成绩组合为单一成绩衡量指标、基于相对名次(前20%,下20%,等等)给出从A到F的评分、根据学生姓氏和名字的首字母对花名册进行排序。
1. 限定输出小数点后数字的位数。
> rosterStudent Math Science English 1 John Davis 502 95 25 2 Angela Williams 600 99 22 3 Bullwinkle Moose 412 80 18 4 David Jones 358 82 15 5 Janice Markhammer 495 75 20 6 Cheryl Cushing 512 85 28 7 Reuven Ytzrhak 410 80 15 8 Greg Knox 625 95 30 9 Joel England 573 89 27 10 Mary Rayburn 522 86 18
2. 由于数学、科学和英语考试的分值不同,在组合之前要先让他们变得可以比较。可以使用scale()函数来成绩进行标准化表示。
> z <- scale(roster[,2:4]) > zMath Science English 1 0.01269128 1.07806562 0.58685145 2 1.14336936 1.59143020 0.03667822 3 -1.02568654 -0.84705156 -0.69688609 4 -1.64871324 -0.59036927 -1.24705932 5 -0.06807144 -1.48875728 -0.33010394 6 0.12806660 -0.20534583 1.13702468 7 -1.04876160 -0.84705156 -1.24705932 8 1.43180765 1.07806562 1.50380683 9 0.83185601 0.30801875 0.95363360 10 0.24344191 -0.07700469 -0.69688609 attr(,"scaled:center")Math Science English 500.9 86.6 21.8 attr(,"scaled:scale")Math Science English 86.673654 7.791734 5.452828
3. 然后,可以通过mean()函数来计算各行的均值以获得综合评分,并使用cbind()将其添加到花名册中
> score <- apply(z,1,mean) > roster <- cbind(roster, score) > rosterStudent Math Science English score 1 John Davis 502 95 25 0.5592028 2 Angela Williams 600 99 22 0.9238259 3 Bullwinkle Moose 412 80 18 -0.8565414 4 David Jones 358 82 15 -1.1620473 5 Janice Markhammer 495 75 20 -0.6289776 6 Cheryl Cushing 512 85 28 0.3532485 7 Reuven Ytzrhak 410 80 15 -1.0476242 8 Greg Knox 625 95 30 1.3378934 9 Joel England 573 89 27 0.6978361 10 Mary Rayburn 522 86 18 -0.1768163
4. quantile()给出了学生综合得分的百分位数
> y <- quantile(roster$score, c(.8,.6,.4,.2) ) > y80% 60% 40% 20% 0.7430341 0.4356302 -0.3576808 -0.8947579
5. 通过使用逻辑运算符,你可以将学生的百分位数排名重编码为一个新的类别型成绩变量。
> roster$grade[score >= y[1]] <- "A" > roster$grade[score < y[1] & score > y[2]] <- "B" > roster$grade[score < y[2] & score > y[3]] <- "C" > roster$grade[score < y[3] & score > y[4]] <- "D" > roster$grade[score < y[4]] <- "F" > rosterStudent Math Science English score grade 1 John Davis 502 95 25 0.5592028 B 2 Angela Williams 600 99 22 0.9238259 A 3 Bullwinkle Moose 412 80 18 -0.8565414 D 4 David Jones 358 82 15 -1.1620473 F 5 Janice Markhammer 495 75 20 -0.6289776 D 6 Cheryl Cushing 512 85 28 0.3532485 C 7 Reuven Ytzrhak 410 80 15 -1.0476242 F 8 Greg Knox 625 95 30 1.3378934 A 9 Joel England 573 89 27 0.6978361 B 10 Mary Rayburn 522 86 18 -0.1768163 C
6. 你将使用函数strsplit()以空格为界把学生姓名拆分为姓氏和名字。
5.3 控制流
for结构:循环重复地执行一个语句,直到某个变量的值不再包含在序列seq中为止。
for (var in seq) statement
while结构:循环重复地执行一个语句,直到条件不为真为止。
while (cond) statement
if-else结构:控制结构if-else在某个给定条件为真时执行语句,也可以同时在条件为假时执行另外的语句。
if (cond) statement1 else statement2
ifelse结构:这个结构是上一个结构的比较紧凑的向量化版本。
ifelse(cond, statement1, statement2)
switch结构:根据一个表达式的值选择语句执行。
switch(expr,...)
5.4 用户自编函数
function()
myfunction <- function(arg1, arg2, ...){statementsreturn(object) }
函数中的对象只在函数内部使用。返回对象的数据类型是任意的,从标量到
5.5 整合与重构
1.转置
转置(反转行和列)是重塑数据集的众多方法中最简单的一个,用函数t()即可对一个矩阵或数据框进行转置。
> cars <- mtcars[1:5,1:4] > carsmpg cyl disp hp Mazda RX4 21.0 6 160 110 Mazda RX4 Wag 21.0 6 160 110 Datsun 710 22.8 4 108 93 Hornet 4 Drive 21.4 6 258 110 Hornet Sportabout 18.7 8 360 175 > t(cars)Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout mpg 21 21 22.8 21.4 18.7 cyl 6 6 4.0 6.0 8.0 disp 160 160 108.0 258.0 360.0 hp 110 110 93.0 110.0 175.0
2.整合数据
在R中使用一个或多个by变量和一个预先定义好的函数来折叠数据是比较容易的。
aggregate(x, by, FUN)
其中x是待折叠对象,by是一个变量名组成的列表,这些变量将被去掉以形成新的观测,而FUN则是用来计算描述性统计量的标量函数,他将被用来计算新的观测值。
> options(digits=3) > attach(mtcars) > aggdata <- aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=TRUE) > aggdataGroup.1 Group.2 mpg cyl disp hp drat wt qsec vs am gear carb 1 4 3 21.5 4 120 97 3.70 2.46 20.0 1.0 0.00 3 1.00 2 6 3 19.8 6 242 108 2.92 3.34 19.8 1.0 0.00 3 1.00 3 8 3 15.1 8 358 194 3.12 4.10 17.1 0.0 0.00 3 3.08 4 4 4 26.9 4 103 76 4.11 2.38 19.6 1.0 0.75 4 1.50 5 6 4 19.8 6 164 116 3.91 3.09 17.7 0.5 0.50 4 4.00 6 4 5 28.2 4 108 102 4.10 1.83 16.8 0.5 1.00 5 2.00 7 6 5 19.7 6 145 175 3.62 2.77 15.5 0.0 1.00 5 6.00 8 8 5 15.4 8 326 300 3.88 3.37 14.6 0.0 1.00 5 6.00
3. reshape包
融合
数据集的融合是将它重构为这样一种样式:每个测量变量独占一行,行中带有要唯一确定这个测量所需的标识符变量。
此处用R内置的数据集,首先将列明改写成小写,然后查看相应的数据
> names(airquality) <- tolower(names(airquality)) > head(airquality)ozone solar.r wind temp month day 1 41 190 7.4 67 5 1 2 36 118 8.0 72 5 2 3 12 149 12.6 74 5 3 4 18 313 11.5 62 5 4 5 NA NA 14.3 56 5 5 6 28 NA 14.9 66 5 6
先看用melt处理上述数据:
> aql <- melt(airquality) No id variables; using all as measure variables > head(aql)variable value 1 ozone 41 2 ozone 36 3 ozone 12 4 ozone 18 5 ozone NA 6 ozone 28 > tail(aql)variable value 913 day 25 914 day 26 915 day 27 916 day 28 917 day 29 918 day 30
默认情况下,melt
认为所有数值列的变量均有值。很多情况下,这都是我们想要的情况。在这里,我们想知道每个月(month)以及每天(day)的ozone, solar.r, wind以及temp的值。因此,我们需要告诉melt
,month和day是"ID variables"。ID variables就是那些能够区分不同行数据的变量,个人感觉类似于数据库中的主键。
> aql <- melt(airquality, id.vars = c("month", "day")) > head(aql)month day variable value 1 5 1 ozone 41 2 5 2 ozone 36 3 5 3 ozone 12 4 5 4 ozone 18 5 5 5 ozone NA 6 5 6 ozone 28
如果我们想修改长数据中的列名:
> aql <- melt(airquality, id.vars = c("month", "day"),variable.name = "climate_variable", value.name = "climate_value") > head(aql)month day climate_variable climate_value 1 5 1 ozone 41 2 5 2 ozone 36 3 5 3 ozone 12 4 5 4 ozone 18 5 5 5 ozone NA 6 5 6 ozone 28
cast函数
在reshape2中有好几个cast
版本的函数。若你经常使用data.frame,就需要使用dcast
函数。acast
函数返回向量、矩阵或者数组。
dcast
借助于公式来描述数据的形状,左边参数表示"ID variables",而右边的参数表示measured variables。可能需要几次尝试,才能找到合适的公式。
这里,我们需要告知dcast
,month和day是ID variables,variable则表示measured variables。
转载于:https://www.cnblogs.com/cyoutetsu/p/5944943.html
第5章--高级数据管理相关推荐
- OpenGL超级宝典(第7版)之第十一章高级数据管理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 OpenGL超级宝典(第7版)之第十一章高级数据管理 前言 一.取消绑定 二.稀疏纹理 三.压缩纹理 四.压缩数据格式 五.高质量纹理 ...
- 50万数据生成6位数不重复字符串_R语言系列3:高级数据管理
R语言系列3:高级数据管理 此文内容为<R语言实战>的笔记,人民邮电出版社出版. 从高中电脑课学VB开始,大一课内开始学习C++,到后来大二为了数模学习Matlab,到大三为了搞深度学习自 ...
- 【数据库系统】数据库系统概论====第十四章 大数据管理
第十四章 大数据管理 文章目录 第十四章 大数据管理 14.1大数据概述 14.1.1什么是大数据 14.1.2大数据的特征 14.2大数据的应用 14.2.1感知现在 预测未来----互联网文本大数 ...
- 《ANSYS 14.0超级学习手册》一第2章 高级应用的基石——APDL
本节书摘来自异步社区<ANSYS 14.0超级学习手册>一书中的第2章,作者 张建伟 , 白海波 , 李昕, 更多章节内容可以访问云栖社区"异步社区"公众号查看 第2章 ...
- 数据库系统概念总结:第五章 高级SQL
周末无事水文章,期末备考的总结资料 第五章 高级SQL 5.1 使用程序设计语言访问数据库 5.1.1 JDBC(Java DataBase Connectivity) JDBC标准定义了Java程序 ...
- Ext JS 6学习文档-第6章-高级组件
Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件,比如 tree 和 data view.它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组 ...
- 深入理解Magento – 第六章 – 高级Magento模型
深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第六章 – 高级Magento模型 我们讲过Magento有两种模型,简单模型和EAV(Entity Attrib ...
- Kali Linux 秘籍 第三章 高级测试环境
第三章 高级测试环境 作者:Willie L. Pritchett, David De Smet 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 既然我们已经了解了 Kali Linux 所包 ...
- AcWing提高算法课Level-3 第四章 高级数据结构
AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...
最新文章
- 【转载】JUnit各个注解的含义
- Windows任务管理器 explorer 进程
- linux 网络 路由,网络路由的顺序在Linux中是否重要?
- oracle 9企业版,Oracle 9i简体中文企业版【32位amp;564位客户端】 - 网络软件频道 -天天游戏吧...
- SpringBoot启动源码探究---getRunListener()
- 基于java宠物商店管理系统(java毕业设计)
- 单行文本溢出省略以及多行文本溢出省略css实现方式
- R语言isprime函数素数(prime number)判断实战
- 计算机网络电子邮件的格式,电子邮件的格式是什么
- 氨基-八聚乙二醇Amino-PEG8-alcohol,352439-37-3
- 【jzoj4826】【小澳的葫芦】【二分答案】
- idea怎样创建jsp文件
- SparkContext的初始化(仲篇)——SparkUI、环境变量及调度
- 【模型分享】SolidWorks摇摆轮机构运动仿真
- 运维标准化与流程化建设深度指南(转)
- Linux 系统调用深思:从原理到实战
- Java开发和测试开发面试杂记
- 相关向量机(RVM)
- Matlab中不为人知的强大命令
- Gunicorn 部署flask-socketio项目,项目访问慢的问题
热门文章
- yolo opencv_如何使用Yolo,SORT和Opencv跟踪足球运动员。
- ansys电力变压器模型_变压器模型……一切是如何开始的?
- 28个不得不看的经典编程算法!!
- UltraEdit中高亮显示verilog HDL关键词
- dba的前景_运维、测试、程序员,这些技术岗位哪个更有前景?
- mysql 中文字段名_MySQL全文索引怎么做?| 教程分享
- springboot jwt token前后端分离_为什么要 前后端分离 ?
- java项目经验怎么写_模具工简历项目经验怎么写
- sql 除以_使用SQL分析游戏运营情况
- 大学期末c语言作业演示,大学C语言期末考试练习题(带详解答案)