
R的特性:
• 免费的
• 一个全面的统计研究平台
• 拥有顶尖水准的制图功能
• 一个可进行交互式数据分析和探索的强大平台
• 轻松地从各种类型的数据源导入数据,包括文本文件、数据库管理系统、统计软件,乃至专门的数据仓库
• 可运行于多种平台之上
• R最激动人心的一部分功能是通过可选模块的下载和安装来实现
的
• 目前有2500多个称为包(package)的用户贡献模块可从
http://cran.r-project.org/web/packages下载
第一次安装一个包,使用命令install.packages()即可
• 使用library()命令载入包,例如library(gclus)
使用包时常见的错误:
• 错误的大小写,例如:help(),Help(),HELP()是三个不同的函数
• 忘记使用必要的引号,例如:install.packages(gclus)会报错
• 函数调用时忘记使用括号,例如:使用help代替了help()
• 使用了尚未载入包中的函数,例如:要先载入gclus才能使用
order.clusters()


据构成的一个矩形数组称为数据集
查看R中所有内置的数据集
data(package = .packages(all.available = TRUE))
• 查看指定包中的数据集
data(package =“package name”)
• 查看某个数据集的信息
Help函数 or ?
matrix(data,nrow,ncol,byrow,dimnames)
a_matrix<-matrix(1:12, nrow=4,dimnames=list(c("r1","r2","r3","r4"),c("c1","c2","c3") )

数组是可以在两个以上的维度存储数据的R数据对象。
使用array函数创建数组:
array(data,dim,dimnames)
数据框可以将不同的数据类型组合在一起的数据结构
使用data.frame函数创建数据框:
data.frame(col1,col2,col3,…)
选取数据框的元素:
- 1 使用[ ],指定两个下标,类似矩阵的选取方法
- 2 可以指定列名访问
- **2** **使用$记号选取某个特定变量**
attach():将数据框添加到R的搜索路径中
detach(): 将数据框从搜索路径中移除
功能:使R表达式位于数据框的作用环境中
with(mtcars,{summary(mpg) plot(mpg,disp)})
patientdata <-data.frame(patientID, age,diabetes, status,
row.names=patientID)
通过定义数据框时指定rowname选项指定实例标识符
用于对数据进行分类并将其存储为级别的数据对象

1 使用函数factor()将原始表示类别的字符串映射到整数上
diabetes <- factor(diabetes)
2 创建有序的因子型向量
status <- factor(status,ordered=TRUE)
3 展示一个因子的所有水平
levels(status)
列表是可以包含多个不同数据元素的数据对象
使用list()函数创建列表:
Mylist <- list(obj1,obj2,obj3,…)
创建列表的同时指定每一个列表项的名称
Mylist <- list(name=obj1,name2 = obj2,…)
访问列表元素:
使用双重方括号、指明代表某个成份的数字或名称、使用一个方括号得到列表
Mylist[[2]]
Mylist[[“ages”]]
Mylist[2]

从键盘输入数据:
par(optionname=value,optionname=name,…)
不带参数时,将生成一个含当前图形参数设置的列表。
令参数no.readonly=TRUE,可以生成一个可修改的当前图形参
数列表。
以这种方式设定的参数值除非被再次修改,否则将会在会话结
束前一直有效。
plot(dose,drugA,type=”b”,lty=2,pch=17)



1 rainbow()
2 heat.colors()
3 terrain.colors
4 topo.colors
5 cm.colors()
6 gray()






使用Hmisc包中的minor.tick()函数添加刻度线。
abline(h=yvalues,v=xvalues) 添加参考线。
图例的调用格式与参数含义:
legend(location,title,legend,…)
⁻ location: 可以使用x,y坐标定位图例,也可用关键字
"bottomright", "bottom", "bottomleft", "left", "topleft", "top",
"topright", "right" and "center"等来放置图例。
⁻ title: 图例标题的字符串
⁻ legend: 图例标签组成的字符型向量

使用par()函数进行组合:在par()函数中使用图形参数mfrow=c(rows,cols)来创建按行填充的,行数为rows、列数为cols的图形矩阵或者是按列填充的矩阵。
使用layout函数进行组合:layout(mat),使用widths和heights两个参数精确控制每幅图形的大小。
• 变量名←表达式:“表达式”部分可以包含多种运算符和函数

问题:有一个名为mydata的数据框,其中的变量为x1和x2,如何:
• 创建一个新变量sumx,存储以上两个变量的加和,
• 并创建一个新变量meanx,存储这两个变量的均值。


根据同一个变量(和/或其他变量)的现有值创建新值的过程。



方法1:调用一个交互式的编辑器: fix(leadership)
方法2:以编程方式, reshape包中有一个rename()函数

方法3:names()函数,示例: date重命名为为testDate, q5重命名为item1到item5。
缺失值记号
• NA (Not Available,不可用)表示缺失值。
• NaN (Not a Number,非数值)表示不可能出现的值。
is.na()函数
•第一,缺失值是不可比较的,即便是与缺失值自身的比较。
•第二,R并不把无限的或者不可能出现的数值标记成缺失值。
na.omit()函数删除所有含有缺失数据的观测
R中提供了一系列用来判断某个对象的数据类型和将其转换为另
一种数据类型的函数
• is.datatype()这样的函数返回TRUE或FALSE
• as.datatype()这样的函数将其参数转换为对应的类型

order()函数:对一个数据框进行排序
• 默认的排序顺序是升序
• 排序变量的前边加一个减号(-)即可得到降序的排序结果
1 向数据框中添加列(变量)
• merge()函数
• bind()函数
2 向数据框中添加行(观测)
• rbind()函数
• merge()函数
• 横向合并两个数据框(数据集)
• 例如:将dataframeA和dataframeB按照ID进行合并
total<-merge(dataframeA, dataframeB, by=“ID”)
• cbind()函数
• 不需要指定一个公共索引,直接横向合并两个矩阵或数据框
total<-cbind(dataframeA, dataframeB)
• rbind()函数
• 纵向合并两个数据框(数据集)
• 两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同
• 如果dataframeA中拥有dataframeB中没有的变量,合并之前做以下某一
种处理:
• 删除dataframeA中的多余变量
• 在dataframeB中创建追加的变量并将其值设为NA(缺失)
total<-rbind(dataframeA, dataframeB)



-选入观测:
取第1行到第3行(前三个观测):
newdata->leadership[1:3,]
newdata
取所有30岁以上的男性:
newdata <- leadership[leadership$gender=="M" & leadership$age > 30,]
使用whichj进行选择:

使用subset()函数进行选择

sample() 函数能够让你从数据集中(有放回或无放回地)抽取大
小为 n 的一个随机样本
• 第一个参数是一个由要从中抽样的元素组成的向量
• 第二个参数是要抽取的元素数量
• 第三个参数表示无放回抽样
mysample<- leadership[sample(1:nrow(leadership),3, replace=FALSE),]>
| 函数 | 描述 | 代码示例 | 运行结果 |
|---|---|---|---|
| abs(x) | x的绝对值 | abs(-4) | 4 |
| sqrt(x) | x的平方根 | sqrt(25) | 5 |
| ceiling(x) | 不小于x的最小整数 | ceiling(3.475) | 4 |
| floor(x) | 不大于x的最大整数 | floor(3.475) | 3 |
| trunc(x) | 向0的方向截取x的整数部分 | trunc(5.99) | 5 |
| round(x, digits=n) | 将x舍入为指定位的小数 | round(3.475,digits=2) | 3.48 |
| signif(x, digits=n) | 将x舍入为指定的有效数字位数 | signif(3.475, digits=2) | 3.5 |
| cos(x)、sin(x)、tan(x) | x的余弦、正弦和正切值 | cos(2) | -0.416 |
| acos(x)、asin(x)、atan(x) | x的反余弦、反正弦和反正切值 | acos(-0.416) | 2 |
| 函数 | 描述 | 代码示例 | 代码运行结果 |
|---|---|---|---|
| log(x, base=n) | 对x取n为底的对数 | log(10,2) | 3.32 |
| log(x) | 自然对数 | log(10) | 2.3 |
| log10(x) | 常用对数 | log10(100) | 2 |
| exp(x) | 指数函数 | exp(2) | 7.39 |
| 函数 | 描述 | 代码示例 | 代码运行结果 |
|---|---|---|---|
| mean(x) | 平均值 | mean(c(1,2,3,4)) | 2.5 |
| median(x) | 中位数 | median(c(1,2,3,4)) | 2.5 |
| sd(x) | 标准差 | sd(c(1,2,3,4)) | 1.29 |
| var(x) | 方差 | var(c(1,2,3,4)) | 1.67 |
| mad(x) | 绝对中位差 | mad(c(1,2,3,4)) | 1.48 |
| quantile(x, probs) | 求分位数。其中x为待求分位 数的数值型向量, probs为一 个由[0,1]之间的概率值组成 的数值向量 | y<- quantile(x, c(.3,.84)) | |
| range(x) | 求域值 | 如 果 : x<-c(1,2,3,4) 则range(x) | 14 |
| sum(x) | 求和 | sum(c(1,2,3,4)) | 10 |
| 函数 | 描述 | 代码示例 | 运行结果 |
|---|---|---|---|
| diff(x, lag=n) | 滞后差分,lag指明滞后几项,默认的 lag值为1 | x<-c(1,5,23,29) diff(x) | 4,18,6 |
| min(x) | 最小值 十 | min(c(1,2,3,4)) | |
| max(x) | 最大值 + | max(c(1,2,3,4)) | 4 |
| scale(x, center = TRUE, scale=TRUE) | 为数据对象x按列进行中心化 (center=TRUE)或者标准化 (center=TRUE, scale=TRUE) |
| 分布名称 | 缩写 | 分布名称 | 缩写 |
|---|---|---|---|
| Beta分布 | beta | Logistic分布 | logis |
| 二项分布 | binom | 多项分布 | multinom |
| 柯西分布 | cauchy | 负二项分布 | nbinom |
| (非中心)卡方分布 | chisq | 正态分布 | norm |
| 指数分布 | exp | 泊松分布 | pois |
| F分布 | f | Wilcoxon符号秩分布 | signrank |
| Gamma分布 | gamma | t分布 | t |
| 几何分布 | geom | 均匀分布 | unif |
| 超几何分布 | hyper | Weibull分布 | weibull |
| 对数正态分布 | lnorm | Wilcoxon秩和分布 | wilcox |




其他实用函数:

语句(statement)是一条单独的R语句或一组复合语句(包含
在花括号{ } 中的一组R语句,使用分号分隔)
• 条件(cond)是一条最终被解析为真(TRUE)或假(FALSE)
的表达式
• 表达式(expr)是一条数值或字符串的求值语句
• 序列(seq)是一个数值或字符串序列



自定义函数的一般形式:
myfunction <- function(arg1, arg2……){statements return (object)}
使用barplot()绘制
➢格式:barplot(height)
• height是一个向量或者一个矩阵
−向量:简单条形图
−矩阵:堆积条形图
• 默认绘制垂直条形图

➢棘状图:一种特殊的条形图,对堆砌条形图进行了重缩放,这样
每个条形的高度均为1,每一段的高度表示比例。
➢使用vcd包中的spine()函数绘制
➢格式:spine(height,…)
➢使用pie函数绘制
➢格式:pie(x,labels)
• x:非负数值向量,表示每个扇形的面积
• labels:各扇形标签的字符型向量
➢使用plotrix包中的fan.plot函数绘制
➢格式:fan.plot(x,labels)
• X:非负数值向量,表示每个扇形的面积
• labels:各扇形标签的字符型向量
➢扇形张开角的大小表示相对比例关系

用于描述连续型随机变量概率密度的一种方法
使用density()生成核密度估计值
density(x)
一般与绘图函数连用:plot(density(x))

➢常用于比较组间差异
➢使用sm包的sm.density.compare()函数向图形叠加多组核密度
图
➢使用格式:
• sm.density.compare(x,factor)
• x是一个数值型向量
• factor是一个分组变量
又称盒须图,通过绘制连续型变量的5数总括来描述了连
续型变量的分布。
使用boxplot函数绘制箱线图:
boxplot(x,…)
如何得到中位数、最大值、最小值、上下四分位数
boxplot.stats(x)
展示单个变量或分组变量:
boxplot(formula,data=dataframe)
formula:一个公式,形如y~A
dataframe:提供数据的数据框或列表数
varwidth:为TRUE时,箱线图的宽度与其样本大小的平方根成正比
horizontal:为TRUE可以反转坐标轴的方向
箱线图的一个变种,是箱线图和核密度图的结合
使用vioplot函数绘制:
vioplot(x1,x2,…,names=,col= )
• x1,x2,…:要绘制的一个或多个数值向量
• names:小提琴图中标签的字符向量
• col:一个颜色向量,指定每副小提琴图的颜色

一种在简单水平刻度上绘制大量有标签值的方法
使用dotchart()函数绘制:
dotchart(x,labels=)
x:数值型向量
labels:由每个点的标签组成的向量
可选参数:groups,gcolor,cex

注意:点图整的分好组以后超级好看 值得深入学习。
使用summary()计算描述性统计量

使用sapply()计算所选择的任意描述性统计量

• n 观测数
• mean 均值
• stdev 标准差
• skew 偏度
• kurtosis 峰度
使用aggregate()分组获取描述性统计量:

使用by()分组计算描述性统计量:


• 一维列联表
• 生成简单的频数统计表:mytable <- table(Arthritis$Improved)
• 查看治疗效果:mytable
• 查看治疗效果的比例: prop.table(mytable)
• 查看治疗效果的百分比:prop.table(mytable)*100
• 求和:margin.table(mytable)
• 求和,将结果加入表中:addmargins(mytable)
• 二维列联表
• 使用table()创建二维列联表: table(Arthritis$Treatment,Arthritis$Improved)
• 使用xtabs()创建二维列联表: mytable <- xtabs(~Treatment+Improved, Arthritis);
• 生成边际频数:margin.table(mytable, 1); margin.table(mytable,2)
• 生成边际比例:prop.table(mytable,1)*100;prop.table(mytable,2)*100
• 查看每个单元格所占比例: prop.table(mytable)
• 添加边际和: addmargins(mytable)
• 添加边际比例和: addmargins(prop.table(mytable) )
• 仅添加了各行的比例和: addmargins(prop.table(mytable,1),2 )
• 仅添加了各列的比例和: addmargins(prop.table(mytable,2),1 )
• 三方包gmodels中的CrossTable()函数:
CrossTable(Arthritis$Treatment,Arthritis$Improved)
• 多维列联表
• 使用table()创建多维列联表:
with(Arthritis,table(Treatment, Sex, Improved))
• 使用xtabs创建多维列联表:
mytable <- xtabs(~Treatment+Sex+Improved, data=Arthritis)
• 使用ftable()对三维列表输出格式进行美化: ftable(mytable)
• 为治疗情况、性别和改善情况生成了边际频数:margin.table(mytable,1);
margin.table(mytable,1);margin.table(mytable,1)
• 为治疗情况× 改善情况分组的边际频数,由不同性别的单元加和而成:
margin.table(mytable,c(1,3))
• 每个Treatment × Sex组合中各类改善情况的比例:
ftable(prop.table(mytable, c(1,2 )))
R提供了多种检验类别型变量独立性的方法
• 卡方独立性检验
• chisq.test( )函数可对二维表的行变量进行卡方独立性检验。
• Fisher精确检验
• fisher.test( )函数可进行FIsher精确检验。
• Cochran-Mantel-Haenszel检验
• mentelhaen.test( )函数可用来进行Cochran-Mantel-Haenszel卡方检验。
对二维表的行变量和列变量进行卡方独立性检验。示例:
1. mytable <- xtabs(~ Treatment + Improved, data = Arthritis)
chisq.test(mytable)
• p<0.01,患者接收的治疗和改善的水平可能存在某种关系
2. mytable <- xtabs(~ Improved + Sex, data = Arthritis)
chisq.test(mytable)
• p>0.05,患者性别和改善情况之间互相独立
• Fisher精确检验的原假设是:边界固定的列联表中行和列是相互
独立的。 例:
mytable <- xtabs(~ Treatment + Improved, data = Arthritis)
fisher.test(mytable)
进行Cochran—Mantel—Haenszel卡方检验,其原假设是,两个名
义变量在第三个变量的每一层中都是条件独立的。例:
mytable <- xtabs(~ Treatment + Improved + Sex, data = Arthritis)
mantelhaen.test(mytable)
assocstats()函数可以用来计算二维列联表的phi系数、列联系数和
Cramer’s V系数。
mytable <- xtabs(~ Treatment + Improved, data = Arthritis)
assocstats(mytable)
相关的类型-Pearson、pearman、Kendall:
• Pearson积差相关系数衡量了两个定量变量之间的线性相关程度
• Spearman等级相关系数则衡量分级定序变量之间的相关程度
• Kendall’s Tau相关系数也是一种非参数的等级相关度量
偏相关是指在控制一个或多个定量变量时,另外两个定量变量之
间的相互关系。
pcor(c(1,5,2,3,6),cov(states))
另外,polycor包中的hetcor( )函数可以计算一种混合的相关矩阵,其中
包括:
• 数值型变量的Pearson积差相关系数、
• 数值型变量和有序变量之间的多系列相关系数、
• 有序变量之间的多分格相关系数以及二分变量之间的四分相关系数。
得到相关系数后,进行统计显著性检验
• 常用的厡假设为变量间不相关(即总体的相关系数为0)
cor.test( )函数
• 对单个的Pearson、Spearman和Kendall相关系数进行检验。
• 使用格式:
cor.test(x, y, alternative = , method = )
• x和y为要检验相关性的变量,
• alternative则用来指定进行双侧检验或单侧检验(取值为“two.side”、
"less"或"greater"),
• method用以指定要计算的相关类型
针对变量为连续型的组间比较,并假设其呈正态分布。
• 检验的调用格式,其中y是一个数值型变量, x是一个二分变量:
t. test (y ~ x, data)
• 假定组间的差异呈正态分布
• 检验的调用格式为, y1和y2为两个非独立组的数值向量 :
t. test(y1, y2, paired = TRUE)
若两组数据独立,可以使用Wilcoxon秩和检验来评估观测是否是从相
同的概率分布中抽得的。
• 调用格式为:wilcox.test(y ~ x, data)
• 其中的y是数值型变量,x是一个二分变量。

R中,拟合线性模型最基本的函数是lm():
myfit <- lm(formula, data)
• formula指要拟合的模型形式 lm()函数中formula的形式一般为 Y~X1+X2+…+Xk
• data是一个数据框,包含了用于拟合模型的数据
• myfit是结果对象,存储在一个列表中

