R提高篇(四): 数据管理二
目录:
- 数学函数
- 统计函数
- 应用示例
- 控制流
数学函数
- ceiling(x): 大于等于 x 的最小整数, 如: ceiling(3.213) --> 4
- floor(x): 小于等于 x 的最大整数,如: floor(3.6534) --> 3
- trunc(x): 取x的整数部分, 如: trunc(5.999) --> 5
- round(x,digits=n): 将x舍入为指定的小数, 如: round(3.4567,2) --> 3.46
- signif(x,digits=n): 将x舍入为指定的有效数字位数 如: signif(3.4567,2) --> 3.5
统计函数
- 算术平均数: 直接将一组数据的各个数值相加除以数值个数,计算公式为:

- 加权算术平均值:根据分组变量值出现的次数或频数为权数计算均数,公式如下:

- x1 为各组组中值(假定值)、f1为每组数据出现的频次,如下示例图,

- 调和平均值:是各个变量值倒数的算术平均数的倒数,习惯用H表示,它通常作为算术平均数的变形使用的,也就是同于受所掌握的资料限制,有时不能直接采用算术平均数的,这就需要使用调和平均数的形式进行计算,公式如下:

- 示例:如早、中、晚菜价格分别是0.67,0.5,0.4 公斤/元,计算不同方式平均价

统计函数
- mean(x): 平均数,语法: mean(x, trim = 0, na.rm = FALSE, ...)
- trim: (0 to 0.5), 如:mean(x, trim = 0.1), 表示先把x的最大的10%的数和最小的10%的数去掉,然后剩下的数算平均
- 示例代码
x <- c(2,4,6,8,10,11)
mean(x,trim = 0.2) #6*0.2=1.2(取整),除去最大最小值11、2 ,实际计算 4 6 8 10的平均 --> 7
mean(x) # 41/6 --> 6.833
- median(x) : 中位数,语法: median(x, na.rm = FALSE) ,从小到大或是从大到小排列时最中间的那个或是最中间两个数的平均值,主要用于算一个整体(小组)的一般水平...
> x <- c(2,4,6,9,10,11)
> median(x)
[1] 7.5
> x <- c(2,4,,10,11)
> median(x)
[1] 9 - med(x): 绝对中位数,语法:mad(x, center = median(x), constant = 1.4826, na.rm = FALSE,low = FALSE, high = FALSE)
- 主要是考虑到数据列中一些与均值相差较远的离谱数据在求均值和方差时候,尤其是求方差时对结果产生较大的影响
- 实际上计算mad的过程就是:constant * cMedian(abs(x - center))
- low,high: 当中位数是两个数字时,根据设置的参数取最小或最大的值
- 示例代码
> x <- c(1,2,3,5,7,8)
> mad(x)
[1] 3.7065
> #分解mad(x)计算过程
> y <- abs(x - median(x));y
[1] 3 2 1 1 3 4
> z <- median(y);z
[1] 2.5
> 1.4826 * z
[1] 3.7065
- 众数:指变量数列中出现次数最多的变量值, R中未提供计算众数的函数,则自定义函数来实现,思路如下:
> x <- c(2,4,6,9,9,11)
> names(table(x))[which.max(table(x))]
[1] ""
> max(table(x))
[1] 2
- rang(x): 求值域, 语法:range(..., na.rm = FALSE)
> x <- c(1,2,3,5,7,8)
> y <- range(x);y
[1] 1 8
> diff(y) #滞后差分
[1] 7 - sd(x): 标准差,语法:sd(x, na.rm = FALSE), 标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值
- 标准差也被称为标准偏差,或者实验标准差,公式为
, , - 公式意义:所有数减去其平均值的平方和,所得结果除以该组数之个数减一 (上面的公式有误),再把所得值开根号,所得之数就是这组数据的标准差
- 标准差应用于投资上,可作为量度回报稳定性的指标。标准差数值越大,代表回报远离过去平均数值,回报较不稳定故风险越高。相反,标准差数值越小,代表回报较为稳定,风险亦较小
- 代码示例:
> x <- c(1,2,3,4)
> sd(x)
[1] 1.290994
> m <- mean(x);
> y <- sum((x - m)^2)/(length(x) -1)
> sqrt(y)
[1] 1.290994
scale(x): 为数据对象x按列进行中心化或标准化,语法:scale(x, center = TRUE, scale = TRUE)
- 数据的中心化是指数据集中的各项数据减去数据集的均值
- 标准化是指中心化之后的数据在除以数据集的标准差
- 示例代码:
> data <- c(1, 2, 3, 6, 3)
> scale(data)
[,1]
[1,] -1.0690450
[2,] -0.5345225
[3,] 0.0000000
[4,] 1.6035675
[5,] 0.0000000
attr(,"scaled:center")
[1] 3
attr(,"scaled:scale")
[1] 1.870829
- quantile(x): 求百分位数,语法:quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE,...)
- 默认计算方法:要计算的点到起始点的距离/终点到起始点的距离=要计算的比例
- 示例代码:
> m <- c(1:20)
> quantile(m,probs = c(0.25,0.75,1));
25% 75% 100%
5.75 15.25 20.00
> (20 -1)*0.25 + 1
[1] 5.75
应用示例
- 根据如下表格中的数据,按成绩对学生进行ABCDEF分等级,最后按姓氏和名字进行排序输出
- 示例数据如下,保存本地 student.rda 文件中

- 第一步: 同于三门学科分值相差甚远,首选必须将变量进行标准化,让数据变得可比较, 每科成绩用单位标准差表示,如下
> setwd("E:\\R")
> load(file = "roster.rda")
> options(digits = 2) #小数点后保留2位
> z <- scale(roster[,2:4])
> z
math science english
1 0.013 1.078 0.587
2 1.143 1.591 0.037
3 -1.026 -0.847 -0.697
4 -1.649 -0.590 -1.247
5 -0.068 -1.489 -0.330
6 0.128 -0.205 1.137
7 -1.049 -0.847 -1.247
8 1.432 1.078 1.504
9 0.832 0.308 0.954
10 0.243 -0.077 -0.697 第二步:计算每行的平均得分获得综合得分,合并到花名册,如下:
> score <- apply(z,MARGIN = 1,FUN = mean);
> score
1 2 3 4 5 6 7 8 9 10
0.56 0.92 -0.86 -1.16 -0.63 0.35 -1.05 1.34 0.70 -0.18
> roster <- cbind(roster,score);roster
student math science english score
1 John Davis 502 95 25 0.56
2 Angla Williams 600 99 22 0.92
3 Bullwinkle Moose 412 80 18 -0.86
4 David Jones 358 82 15 -1.16
5 Janice Makhammer 495 75 20 -0.63
6 Cheryl Cushing 512 85 28 0.35
7 Reuven Ytzrhak 410 80 15 -1.05
8 Greg Knox 625 95 30 1.34
9 Joel England 573 89 27 0.70
10 Mary Rayburn 522 86 18 -0.18第三步:按百分位数进行等级划分,如下:
> y <- quantile(roster$score,probs = c(0.8,0.6,0.4,0.2))
> y
80% 60% 40% 20%
0.74 0.44 -0.36 -0.89
> roster <- within(roster,{
+ grader <- NA
+ grader[score >= y[1]] <- "A"
+ grader[score < y[1] & score >= y[2]] <- "B"
+ grader[score < y[2] & score >= y[3]] <- "C"
+ grader[score < y[3] & score >= y[4]] <- "D"
+ grader[score < y[4]] <- "E"
+ })
> roster
student math science english score grader
1 John Davis 502 95 25 0.56 B
2 Angla Williams 600 99 22 0.92 A
3 Bullwinkle Moose 412 80 18 -0.86 D
4 David Jones 358 82 15 -1.16 E
5 Janice Makhammer 495 75 20 -0.63 D
6 Cheryl Cushing 512 85 28 0.35 C
7 Reuven Ytzrhak 410 80 15 -1.05 E
8 Greg Knox 625 95 30 1.34 A
9 Joel England 573 89 27 0.70 B
10 Mary Rayburn 522 86 18 -0.18 C第四步: 将student变量拆分为firstname 和 lastname ,并按姓氏和名称排序,将结果保存为本地文件 studentGrade.rda
> name <- strsplit(roster$student," ")
Error in strsplit(roster$student, " ") : non-character argument
> class(roster$student) #查看student类型,是因子,必须转化成字符
[1] "factor"正确代码如下:
> name <- strsplit(as.character(roster$student)," ")
> firstname <- sapply(name,"[",1) # "[" 是一个可以提取某个对象一部分的函数,在这里用来提取列表中name各成份中的第一或二个元素
> lastname <- sapply(name,"[",2)
> sGrade <- cbind(firstname,lastname,roster[,-1])
> sGrade[order(sGrade$lastname),]
firstname lastname math science english score grader
6 Cheryl Cushing 512 85 28 0.3532485 C
1 John Davis 502 95 25 0.5592028 B
9 Joel England 573 89 27 0.6978361 B
4 David Jones 358 82 15 -1.1620473 E
8 Greg Knox 625 95 30 1.3378934 A
5 Janice Makhammer 495 75 20 -0.6289776 D
3 Bullwinkle Moose 412 80 18 -0.8565414 D
10 Mary Rayburn 522 86 18 -0.1768163 C
2 Angla Williams 600 99 22 0.9238259 A
7 Reuven Ytzrhak 410 80 15 -1.0476242 E
> save(sGrade,file = "studentGrade.rda")
控制流
- for : 示例: for(i in 1:10) print("hello")
- while: 示例:
i<-10
while (i>0)
{
print("hello")
i <- i-1
} - ifelse: 语法: ifelse(cond,statement1,statement2) , 当 cond = true 时执行第一个语句,反之执行第二个
- swith: 语法: switch(expression, case1, case2, case3....)
x <- switch(
3,
"first",
"second",
"third",
"fourth"
)
x
R提高篇(四): 数据管理二的更多相关文章
- R提高篇(三): 数据管理一
目录: 创建新变量 变量重编码 日期值 数据排序 数据集合并 数据子集 随机取样 创建新变量 算术运算函数:x%%y [求余 x mod y, 5%%2的结果为1], x%/%y [整数除法,5% ...
- java提高篇(十七)-----异常(二)
承接上篇博文:java提高篇-----异常(一) 五.自定义异常 Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表 ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点能够对List接口有了比較深的了解了.仅仅有通过归纳总结的知 ...
- java提高篇(四)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- R提高篇(二): 图形初阶
目录: 图形示例 图形参数 符号.线条 颜色 文本属性 尺寸与边界 自定义标题 自定义坐标轴 图例 文本标注 图形组合 图形示例 如下代码描述病人对两种药物五个剂量水平上的响应情况 > myda ...
- (转)java提高篇(四)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- R提高篇(五): 描述性统计分析
数据作为信息的载体,要分析数据中包含的主要信息,即要分析数据的主要特征(即数据的数字特征), 对于数据的数字特征, 包含数据的集中位置.分散程度和数据分布,常用统计项目如下: 集中趋势统计量: 均值 ...
- R提高篇(一): 输入输出
目录: 文本输出 图形输出 数据输入 数据框输出 文本导入 Excel导入 文本输出 语法: sink(file = NULL, append = FALSE, type = c("outp ...
- java提高篇(十二)-----equals()
equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...
随机推荐
- [转]设计模式(22)-Strategy Pattern
一. 策略(Strategy)模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 假 设现 ...
- 【题解】【链表】【Leetcode】Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- (理论篇)温故而知新_PHP入门基础教程
简单的回顾一下基础知识 1.嵌入方法: 类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定. 2.引用文件: 引用文件的方法有两种:req ...
- poj 1475 uva 589 - Pushing Boxes
题目大意 人推箱子从起点到终点,要求推箱子的次数最少,并打印出来人移动的路径. 题目分析 对于箱子进行宽搜的同时,要兼顾人是否能够把箱子推到相应的位置 每一次对箱子bfs 然后对人再bfs #incl ...
- 使用Dnsmasq搭建本地dns服务器上网
导读 搭建一个属于自己的本地DNS服务器很有必要,利用Dnsmasq来搭建一个属于自己的本地DNS服务器,享受更干净无污染.更智能快速和没有广告干扰的DNS解析服务. 一.Dnsmasq安装 安装并启 ...
- Oracle语句
分页查询: select rn,last_name,salary from( select rownum rn,last_name,salary from( select last_name,sala ...
- eclipse template里面的${user}更改
打开eclipse目录下的eclipse.ini文件,添加上一行 -Duser.name="whateveryouwant" 这样在eclipse中的${user}变量的值就变成了 ...
- UVa 1394 约瑟夫问题的变形
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Codeforces Round #146 (Div. 2)
A. Boy or Girl 模拟题意. B. Easy Number Challenge 筛素数,预处理出\(d_i\). 三重循环枚举. C. LCM Challenge 打表找规律. 若\(n\ ...
- thinkPHP 中去除URL中的index.php
例如你的原路径是 http://localhost/app/index.php/module/action/var/value/ 那么现在的地址是 http://localhost/app/modul ...