1、统计函数
函数 | 描述 |
mean() | 平均数 |
median() | 中位数 |
sd() | 标准差 |
var() | 方差 |
mad() | 绝对中位差,即原数据减去中位数后得到的新数据的绝对值的中位数 |
quantile(x,probs) | 求分位数,x为待求分位数的数值型向量,probs为一个由[0,1]之间的概率值组成的数值向量,eg: a<-quantile(x,c(.3,.84) 求x的30%和84%分为点 |
range() | 值域,a<-c(1,2,3,4) 返回c(1,4), |
sum() | 求和 |
diff(x,lag=n) | 滞后差分,lag指定滞后几项,默认1,对于c(1,5,23,29)返回4,18,6 |
min() | 最小值 |
max() | 最大值 |
scale(x,center=TRUE,scale=TRUE) | 为数据对象x按例进行中心化(center=TRUE)或标准化(center=TRUE,scale=TRUE) |
sweep() | 运算,变换 |
apply() | 运算 |
## scale() 对数据矩阵做中心化和标准化变换,将一组数进行处理,默认情况下是将一组数的每个数都减去这组数的平均值后再除以这组数的均方根
## 两个参数,
一个是 center=TRUE,默认的,是将一组数中每个数减去平均值,若为false,则不减平均值;
另一个 scale=TRUE:默认的,是将一组数中每个数除以均方根
## apply()把一个function作用到array或者matrix的margins(可以理解为数组的每一行或者每一列)中,返回值vector、array、list
注意:使用apply之后,返回都是一个向量,并不会因为apply计算行(列)的sum就会自动返回一个列(行)向量
eg:
apply(x, 2, max) - apply(x,2,min) #算出极差,即列上的最大值-最小值
## sweep(x, MARGIN, STATS, FUN="-", ...) 对矩阵进行运算
MARGIN为1,表示行的方向上进行运算,为2表示列的方向上运算
STATS是运算的参数 即变量??
FUN为运算函数,默认是减法
eg:
sweep(x, 2, apply(x, 2, mean)) #在列的方向上减去均值
###极差正规化变换
>center <- sweep(x, 2, apply(x, 2, min))
>R <- apply(x, 2, max) - apply(x,2,min)
>x_star <- sweep(center, 2, R, "/")
注意:均方差=标准差<>均方根,
2、数学函数
函数 | 描述 |
abs() | 绝对值 |
sqrt() | 平方根 |
ceiling() | 向上取整 |
floor() | 向下取整 |
trune() | 向0的方向截取整数部分 |
round(x,digits=n) | 将x舍入为指定的小数 |
signif(x,digits=n) | 将x舍入为指定的有效数字位数 |
cos()、sin()、tan() | 三角函数 |
acos()、asin()、atan() | 反三角函数 |
cosh()、sinh()、tanh() | 双曲三角函数 |
acosh()、asinh()、atanh() | 反双曲三角函数 |
log(x,base=n) | 对x取以n为底的对数 |
log(x) | 自然对数,以e为底 |
log10(x) | 常用对数,以10为底 |
exp(x) | 指数函数 |
3、运算符
运算符 | 描述 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 严格等于 |
!= | 不等于 |
!x | 非x |
x|y | x 或 y |
x&y | x 和 y |
isTRUE(x) | 测试x是否为TRUE |
4、日期符号和函数
符号、函数 | 含义 | 示例 |
%d | 数字表示的日期 | 01-31 |
%a | 缩写的星期 | Mon |
%A | 非缩写星期 | Monday |
%m | 月份 | 00-12 |
%b | 缩写月份 | Jan |
%B | 非缩写月份 | January |
%y | 两位数的年份 | 18 |
%Y | 四位数的月份 | 2018 |
as.Date(x, "input_format") | 日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量,input_format则给出了用于读入日期的适当格式 | 见下 |
format(x,format="output_format") | 输出指定格式的日期值,还可以提取部分内容 | |
as.character() | 将日期值转换为字符型 |
> a<-as.Date(c("2018-3-4","2018-4-5")) ##字符串
> a
[1] "2018-03-04" "2018-04-05" ##数值型
> b<-c("08/08/2018","09/09/2018")
> ans<-as.Date(b,"%m/%d/%Y")
> ans
[1] "2018-08-08" "2018-09-09"
> b<-c("08/08/2018","09/09/2018")
> aa<-as.Date(b)
> aa
[1] "0008-08-20" "0009-09-20" ##由结果可知,默认年月日~~~
> as.Date(b) ##直接输出结果
[1] "0008-08-20" "0009-09-20"
> Sys.Date() ##当前日期
[1] "2018-08-23"
> date() ##当前星期 月日 时间 年份
[1] "Thu Aug 23 18:42:16 2018"
> today<-Sys.Date()
> format(today,format="%B %d %y")
[1] "八月 23 18" ##中文版的R所以没有输出的不是8月的英语??
> format(today,format="%B%d%y")
[1] "八月2318"
> format(today,format="%A")
[1] "星期四"
> as.character(today)
[1] "2018-08-23"
> as.Date(today)
[1] "2018-08-23"
5、函数na.omit()移除所有含有缺失值的观测
6、table()函数
1)对应的就是统计学中的列联表,是一种记录频数的方法,统计所有因子对出现的情况的频数
> s<-c(1,2,3,3,4,2,3,4,5,6)
> z<-table(s)
> z
s
1 2 3 4 5 6 ##元素
1 2 3 2 1 1 ##对应出现的频数
> summary(z)
Number of cases in table: 10
Number of factors: 1
> names(z) ##提取元素
[1] "1" "2" "3" "4" "5" "6"
> as.numeric(3,4) ##输出指定频数的元素,若w<-names(z),as.numeric(w)即为所有元素
[1] 3
2)实现混淆矩阵
> t<-table(c(1,0,1,1,1,0,0,1),c(0,0,1,1,1,0,1,1)) ##可理解第一个c为实际值,第二个为预测值
> t
0 1
0 2 1
1 1 4 ## 对角线即为预测对的数量
> (sum(diag(t))/sum(t) #预测对的数量除以总数据量
+ )
[1] 0.75
> sum(diag(t))/sum(t)
[1] 0.75
> diag(t) ## 0猜对2个,1猜对4个
0 1
2 4
7、aggregate函数
数据处理中常用到的函数,简单说有点类似sql语言中的group by,可以按照要求把数据分组聚合,然后对聚合以后的数据进行加和、求平均等各种
> x=data.frame(name=c("张三","李四","王五","赵六"),
+ sex=c("M","M","F","F"),age=c(20,40,22,30),
+ height=c(166,170,150,155))
> aggregate(x[,3:4],by=list(sex=x$sex),FUN=mean)
sex age height
1 F 26 152.5
2 M 30 168.0
注意:
• 字符或者factor类型的列不要一起加入计算,会报错
• by参数要构造成list,如果有多个字段,by就对应队列,和group by多个字段是同样的道理