数学函数
函数 | 描述 |
---|---|
abs(x) | 绝对值 |
sqrt(x) | 平方根 |
ceiling(x) | 不小于x的最小整数 |
floor(x) | 不大于x的最大整数 |
trunc(x) | 向0方向截取整数部分 |
round(x,digits=n) | 将x取为指定n位小数的数值, round(3.475, digits=2)返回值为 3.48 |
signif(x,digits=n) | 将x取为指定n位有效位的数值 |
cos(x)、sin(x)、tan(x) | 余弦、正弦和正切 |
acos(x)、asin(x)、atan(x) | 反余弦、反正弦和反正切 |
cosh(x)、sinh(x)、tanh(x) | 双曲余弦、双曲正弦和双曲正切 |
acosh(x)、asinh(x)、atanh(x) | 反双曲余弦、反双曲正弦和反双曲正切 |
log(x,base=n) |
以n为底的x的对数值 |
log(x) log10(x) |
自然对数 常用对数 |
exp(x) |
指数函数 |
统计函数
函数 | 描述 |
---|---|
mean() | 平均值 |
median() | 中位数 |
std() | 标准差 |
var() | 方差 |
mad() | 绝对中位差 |
quantile() | 分位数 |
range() | 值域 |
sum() | 求和 |
diff() | 滞后差分,lag 用以指定滞后几项。默认的 lag 值为 1x<- c(1, 5, 23, 29) diff(x)返回值为 c(4, 18, 6) |
min() | 最小值 |
max() | 最大值 |
scale(x,center=TRUE, scale=TRUE) |
为数据对象 x 按列进行中心化(center=TRUE)或标准化(center=TRUE,scale=TRUE) |
概率函数
在R中,概率函数形如 :[dpqr]distribution_abbreviation()
其中第一个字母表示其所指分布的某一方面:
- d = 密度函数(density)
- p = 分布函数(distribution function)
- q = 分位数函数(quantile function)
- r = 生成随机数(随机偏差)
生成随机种子
函数set.seed()。
生成多元正态数据
MASS包的mvrnorm()函数。
mvrnorm(n,mean,sigma)
其中n为样本的大小,mean为均值,sigma为方差--协方差矩阵(或相关矩阵)。
字符处理函数
其他实用函数
将函数应用到矩阵和数据框
R中提供了一个apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维 度上。
apply()函数的使用格式为:
apply(x, MARGIN, FUN, ...)
实例:一个数据问题的解决
问题:将学生的各科考试成绩组合为单一的成绩衡量指标,基于相对名次 (前20%、下20%、等等)给出从A到F的评分,根据学生姓氏和名字的首字母对花名册进行排序。
options(digits = 2) #小数点保留两位
#构建数据
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)
Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
roster <- data.frame(Student, Math, Science, English,
stringsAsFactors=FALSE)
#计算综合得分
z <- scale(roster[,2:4]) #标准化进行统一量纲
score <- apply(z, 1, mean)
roster <- cbind(roster, score)
#对学生进行评分
y <- quantile(score, c(.8,.6,.4,.2))
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"
#抽取姓氏和名字
name <- strsplit((roster$Student)," ") #以空格为界将姓名拆分为姓氏和名
Lastname <- sapply(name, "[", 2)
Firstname <- sapply(name, "[", 1) #提取列表中每个成分的第一个元素,放入一个储存名字 的向量Firstname
roster <- cbind(Firstname,Lastname, roster[,-1])
#按姓氏进行排序
roster <- roster[order(Lastname,Firstname),]
roster
**************************************************************
Firstname Lastname Math Science English score grade
6 Cheryl Cushing 512 85 28 0.35 C
1 John Davis 502 95 25 0.56 B
9 Joel England 573 89 27 0.70 B
4 David Jones 358 82 15 -1.16 F
8 Greg Knox 625 95 30 1.34 A
5 Janice Markhammer 495 75 20 -0.63 D
3 Bullwinkle Moose 412 80 18 -0.86 D
10 Mary Rayburn 522 86 18 -0.18 C
2 Angela Williams 600 99 22 0.92 A
7 Reuven Ytzrhak 410 80 15 -1.05 F