R语言学习笔记1

来源:互联网 发布:网络短信在线发送 编辑:程序博客网 时间:2024/04/28 13:43

【第一章 】
1、访问帮助文档
可用 ? help
如:?boxplot 或 help(boxplot)
2、添加注释
#
3、载入包
library([要载入的包名])
如:library(MASS)
4、下载包
install.packages(“Hmisc”)
或用RStudio中右下角package中的install
5、设置工作目录
setwd()
如setwd(“C:/AnyDirectory”)
6、查看R中工作区间变量
objects()
删除之
rm()
7、关闭R
q()
8、引用R和R程序包
citation()
9、数据管理
vector:向量
numeric:数值型向量
logical:逻辑型向量
character;字符型向量
list:列表
data.frame:数据框
c:连接为向量或列表

10、数据的存储与读取
存储:
1)保存为文本文件:
设数据框d<-data.frame(x=c(1,2,3),y=c(‘A’,’B’,’C’))

write.table(d,file=”c:/data/foo.txt”,rowsname=F,quote=F)

row.names = F表示行名不写入文件,quote = F表示变量名不放入双引号中
2)保存为逗号分割:

write.csv(d,file=”c:/data/foo.csv”,rowsname=F,quote=F)

3)保存为R格式文件

save(d,file=”c:/data/foo.Rdata”)
保存工作映象:
save.image()

读取:
1)read.table()
2)scan() 可指定变量的类型,还可用于创建不同的对象
如:

mydata <-scan(“data.dat”,what=list(“”,0,0)) (“”,0,0对应字符,数值,数值)

3)read.fwf()
除了选项widths用来说明读取字段外,与read.table()没什么差别

mydata<- read.fwf(“data.txt”,widths=c(1,4,3),col.names=c(“x”,”y”,”z”))

【第二章 R中的数据对象】
对象:包括向量(vector)、矩阵(matrix)、因子(factor)、列表(list)、数据框(data frame)、函数(function)
对象模式:包括 numeri,ccomplex,
character,logical,list,function,expression等,可通过mode(object)查看

length(object)查看对象长度

attribute(object)查看更深入的属性

模式的转换:可通过形为as.something()的函数,如:as.character(x),as.integer(a)

summary可查看对象的基本信息(min、max、mean等)

1 向量(数字、缺失值(即NA)、字符、逻辑向量)
(1).赋值 如 : a<-59 (‘<-’为赋值运算符,也 可用 ‘=’,同时与assign()函数等价,例:assign(‘a’,c(1:3))) 同时也可 c(1:3)->a
(注意:如果只输重点内容入一个表达式会被当做命令打印,而不储存,如输入1/x将只做打印)
(2)运算
常用有:+,-,*,/,^(次方),log,exp,sin,cos,tan,sqrt等
还有一些常见的统计函数:
max:选出向量中最大的元素
min : 选出向量中最小的元素
range: 其值为一个长度为2的向量,即c(min(x),max(x))
length(x):返回x中元素的个数,即向量的长度
sum(x):给出了x中元素的总和,若a中一个值为空,则返回NA(返回NA的解决方法法:sum(a,na.rm=TRUE))
prod(x):给出了x中元素的乘积
mean(x):给出了样本的平均值
var(x): 给出了样本的方差
sort(x):返回一个与x具有相同长度的向量,其中的元素按照升序排列(还有order(),sort.list()函数)
pmax(pmin):返回一个与最长的向量长度相同的向量,向量中的参数由所有向量在相应位置的最大值(最小值)组成。
(3)序列
rep函数表重复
(each,times)
如:> id<-rep(c(1,2,3,4),each = 8)或 > id<-rep(c(1:4),each=8) > [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4
seq函数表连续
五个参数:from,to(可不写参名),
by 那个(指定步长,默认为1)
length(指定序列长度)
along
如:

id <-seq(from = 1, to=4,by=1)
>id
[1] 1 2 3 4
rep(id,each=8)
[1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4

【补充】
缺失值:
返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量的相应位置的元素的值是TRUE还是FALSE
NAN(Not a Number):由数值运算产生,如0/0,inf-inf
(is.na(x)对NA和NAN都返回TRUE,is.nan(x)只对NaN的值返回TRUE)
x[is.na(x)]<-0 将向量中的NA元素用0代替
负整数向量 (除…外)
<y<-x[-(1:4)] 表示向量y取向量x前4个元素外的元素

向一个向量追加元素:
append()函数

x
[1] 1 2 3 4 5 6 7 8 9 10 11 12
x=append(x,0,after=1)
x
[1] 1 0 2 3 4 5 6 7 8 9 10

2、因子
因子是一种向量对象,给自己的组件指定了一个离散的分类(分组),它的组件由其它等长的向量组成,R提供了有序因子和无序因子。
(即将对象的值分成不同的组(levels))
(1)用函数factor创建
如:

x<-factor(rep(c(‘red’,’green’,’yellow’),times=3))
x
[1] red green yellow red green yellow red green yellow
Levels: green red yellow

(2)
levels()函数可用来观察因子有多少不同的levels
tappley()函数可对它的第一个参数的组件中所包含的每个组应用一个参数指定的函数,如下可用来计算平均分。
ordered()函数可用来创建有序因子
如下:

student<- c(‘张量’,’徐丽’,’张量’,’徐丽’,’宋海’,’宋海’,’张量’,’徐丽’,’宋海’,’杜远’)
fc<-factor(student)
fc
[1] 张量 徐丽 张量 徐丽 宋海 宋海 张量 徐丽 宋海 杜远
Levels: 杜远 宋海 徐丽 张量
x<-c(95,86,84,90,92,84,79,86,99,85)
smeans<-tapply(x,student,mean)
smeans
杜远 宋海 徐丽 张量
85.00000 91.66667 87.33333 86.00000
ordered(student)
[1] 张量 徐丽 张量 徐丽 宋海 宋海 张量 徐丽 宋海 杜远
Levels: 杜远 < 宋海 < 徐丽 < 张量

3.数组和矩阵
数组可看做是一个有递增下标表示的数据项的集合。
(1)数组的生成
可通过c函数,或array函数。 在一个变量中存储多个值 如:

a <- c(59,55,53,67.5,55)
a <-array(1:20)

(2)数组的索引和数组的子块
查看变量a中所有值 :输入a。
查看a中第二个值:输入a[2]。
查看a中前五个值:输入a[1:5]。
查看a中除了第二个值以外的其他值:输入a[-2])

(3)索引数组 (拷贝)
使用索引数组来指定数组的某些元素。
例如:有4X5的数组a,若要得到a中的a[1,3], a[2,2] 和a[3,1]这三个元素,可以生成索引向量i,然后用a[i]得到它们。

a <- array(1:20,dim=c(4,5)) # Generate a 4 by 5 array.
i <- array(c(1:3,3:1),dim=c(3,2))
i
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
a[i]
[1] 9 6 3

(4)vector 函数结合数据
vector函数作用与c函数类似,可用来代替c函数。优点:可事先定义长度。
例:> W<-vector(length=4)

W[1]<-59
W[2]<-38
W[3]<-45.8
W[4]<-52.5
W
[1] 59.0 38.0 45.8 52.5

(5)创建矩阵
matrix(data=NA ,nrow=1,ncol=1,byrow=false,dimnames=null)
data 变量,byrow为逻辑值,默认为false,表示按列排布

a<-matrix(1:3,nrow=1)

(6)构建分区矩阵:c,cbind和rbind结合变量
c: 若有a,b,c,d四个变量(变量中可含多值),c函数可用来连结这些函数中的数据(假定其有如下数据,a: 1 2 3 ,b: 4 5 6,c: 8.9 0 32 ,d:15,NA,15.7)
如:>temp<-c(a,b,c,d)
键入temp回车后可看见temp以为a,b,c,d的连结变量(含它们的值)
即:> temp
[1] 1 2 3
[4] 4 5 6
[7] 8.9 0 32
[10] 15 NA 15.7
cbind:将所结合的变量以列的形式输出
如:

temp<-cblind(a,b,c,d)
temp
a b c d
[1,] 1 4 8.9 15
[2,] 2 5 0 NA
[3,] 3 6 32 15.7

访问第一列:

temp[,1] 或 >temp[1:3,1]
[1] 1 2 3

rbind:将数据以行进行结合
如:

temp2<-rbind(a,b,c,d)
temp2
[,1] [,2] [,3]
a 1 2 3
b 4 5 6
c 8.9 0 32
d 15 NA 15.7

(7)dim()函数返回维数
如上例temp:>dim(temp)
[1] 3 4
若只返回行数,则 :

dim(temp)[1]

(8)矩阵运算
矩阵外积 :操作符为 %o%

ab <-a%o% 或者 ab<-outer(a,b,’*’)

矩阵相乘:a%*%b

ab<-a%*%b

矩阵转置:t(a)

维度变换:aperm()函数
a<-array(1:24,2:4) #2表示行,3表示列,4表示维度
x<-aperm(a,c:(2,3,1))#原来行的个数变成了维度的个数,即原矩阵有两行,则现在维度是2;原来列是三列,现在变成行数为三行;原来维度为四,现在列的个数为四。aperm()中c()向量中第一个位置表示的是对行的调整,第二个位置表示对列的调整,第三个位置对维度的调整,如果对一维矩阵进行调整,则可以不用第三位置。

交叉乘积:
crossprod(a,b)相当于t(a)%*%b
diag(a):
如果a是向量,diag(a)返回一个由a的元素为对角元素的对角矩阵。

a=diag(c(1:4))
a
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 2 0 0
[3,] 0 0 3 0
[4,] 0 0 0 4

如果a为矩阵,diag(a)返回一个由a主对角元素组成的向量。

a=diag(matrix(1:12,nrow=3))
a
[1] 1 5 9

如果a只是一个数值,那么diag(a)是一个aXa的单位矩阵

a=diag(4)
a
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 0 0 1 0
[4,] 0 0 0 1

特征值和特征向量:
eigen(x, symmetric, only.values = FALSE, EISPACK = FALSE)
x为矩阵,symmetric项指定矩阵x是否为对称矩阵,若不指定,系统将自动检测x是否为对称矩阵。

最小二乘拟合即QR分解:lsfit(), qr()。

强制转换为向量:as.vector(),或者直接c().

4.数据框
(1)数据框的建立
直接建立:
data.frame()函数
如:

df = data.frame(index = 1:4,values = c(23,43,23,3))
df
index values
1 1 23
2 2 43
3 3 23
4 4 3

(数据框中的向量必须有相同长度或长度有倍数关系,如其中有一个比其它短,则按循环法则)

间接建立:
可采用读取数据文件(文本、excel、其它统计软件)

如:

f=read.table(“c:/data/a.txt”,header=T)
f
treat weight
1 A 3.4
2 B na
3 C 5.6

a.txt中数据为:
treat weight
1 A 3.4
2 B na
3 C 5.6
(注意结尾有个回车!)

(2)适用于数据框的函数:
max()、min()、median()、sd()、sum()、cumsum()、cumprod()、cummax()、cummin()、cov()、cor()
summary()、pairs()、xtable()

举例:R内嵌数据集puromycin

attach(Puromycin) #挂接数据集使之激活
detach(Puromycin)#解挂
summary(Puromycin) #显示主要的描述性统计量
conc rate state
Min. :0.0200 Min. : 47.0 treated :12
1st Qu.:0.0600 1st Qu.: 91.5 untreated:11
Median :0.1100 Median :124.0
Mean :0.3122 Mean :126.8
3rd Qu.:0.5600 3rd Qu.:158.5
Max. :1.1000 Max. :207.0
pairs(Puromycin)
这里写图片描述
xtabs (~state+conc,data=Puromycin)
conc
state 0.02 0.06 0.11 0.22 0.56 1.1
treated 2 2 2 2 2 2
untreated 2 2 2 2 2 1

(3)数据集下标与子集的提前
提取方式与矩阵基本相同。
提取单个元素:puromycin[1,1]
提取一个子集:(一三五行一三列) puromycin[c(1,3,5),c(1,3)]
(一三五行所有列):puromycin[c(1,3,5),]
提取一列 : Puromycin$conc
提取满足条件的子集: subset(Puromycin,state==’treated’& rate>130)

(4)数据框中添加新变量
方法一:

Puromycinicod<1/Puromycinconc
方法二:with()函数
Puromycinicod<with(Puromycin,1/Puromycinconc)
方法三:transform()函数,一次定义多个量
puromycin<-transform(Puromycin,icod=1/conc,sqrtconc=sqrt(conc))

5、列表
可用list()函数创建,方法与创建数据框相似

l1<-list(x=1:6,y=matrix(1:4,nrow=2))
l1
$x
[1] 1 2 3 4 5 6

y[,1][,2][1,]13[2,]24l1[1][1]123456l1[[1]][3][1]3l1x[2]
[1] 2

6、时间序列
由函数ts()创建
ts(data=NA,start=1,end=numeric(0),frequency=1,deltat=1,ts.eps=getOption(“ts.eps”),class,names)
frequency:单位时间内观察的频数
deltat:两个观察值间的时间间隔,与frequency必须只能给定其中一个
ts.eps:序列之间的误差值,若序列间频率差异小于ts.eps则认为其频率相等

ts(1:47,start = 1955,deltat = 1/12)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1955 1 2 3 4 5 6 7 8 9 10 11 12
1956 13 14 15 16 17 18 19 20 21 22 23 24
1957 25 26 27 28 29 30 31 32 33 34 35 36
1958 37 38 39 40 41 42 43 44 45 46 47
l1<-list(1:6,matrix(1:4,nrow=2))
l1
[[1]]
[1] 1 2 3 4 5 6
[[2]]
[,1] [,2]
[1,] 1 3
[2,] 2 4

deltat=1/12 等价与frequency =12

ts(1:47,start = 1955,frequency = 12)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1955 1 2 3 4 5 6 7 8 9 10 11 12
1956 13 14 15 16 17 18 19 20 21 22 23 24
1957 25 26 27 28 29 30 31 32 33 34 35 36
1958 37 38 39 40 41 42 43 44 45 46 47

例:

ts(1:12,frequency = 4,start = c(1293,2))
Qtr1 Qtr2 Qtr3 Qtr4
1293 1 2 3
1294 4 5 6 7
1295 8 9 10 11
1296 12

例:

ts(matrix(rpois(36,2),12,3),start = c(1934,1),frequency = 12)
Series 1 Series 2 Series 3
Jan 1934 1 3 2
Feb 1934 0 0 1
Mar 1934 1 5 2
Apr 1934 2 1 2
May 1934 3 4 3
Jun 1934 2 1 3
Jul 1934 1 2 3
Aug 1934 0 2 3
Sep 1934 3 4 0
Oct 1934 2 1 2
Nov 1934 1 4 1
Dec 1934 1 0 1

【第三章、R的图形功能】

高级绘图函数

plot(x):以x的元素值为纵坐标、以序号为横坐标绘图 plot(x,y):x(x轴)与y(y轴)的二元作图 sunflowerplot(x,y):同上,但以相似坐标的点作为花朵,其花瓣数目为点的个数 pie(x):饼图 boxplot(x):盒形图(“box-and-whiskers”) stripchart(x):把x的值画在一条线段上,样本量较小时可作为盒形图的替代 coplot(x~y|z):关于z的每个数值(或数值区间)绘制x与y的二元图 interaction.plot(f1, f2, y):如果f1和f2是因子,作y的均值图,以f1的不同值作为x轴, 而f2的不同值对应不同曲线;可以用选项fun指定y的其他的统计量(缺省计算均值,fun=mean) matplot(x,y):二元图,其中x的第一列对应y的第一列,x的第二列对应y的第二列,依次类推。 dotchart(x):如果x是数据框,作Cleveland点图(逐行逐列累加图) fourfoldplot(x):用四个四分之一圆显示2X2列联表情况(x必须是dim=c(2,2,k)的数组,或者是dim=c(2,2)的矩阵,如果k=1) assocplot(x):Cohen–Friendly图,显示在二维列联表中行、列变量偏离独立性的程度 mosaicplot(x):列联表的对数线性回归残差的马赛克图 pairs(x)如果x是矩阵或是数据框,作x的各列之间的二元图 plot.ts(x):如果x是类"ts"的对象,作x的时间序列曲线,x可以是多元的,但是序列必须有相同的频率和时间 ts.plot(x):同上,但如果x是多元的,序列可有不同的时间但须有相同的频率 hist(x):x的频率直方图 barplot(x):x的值的条形图 qqnorm(x):正态分位数-分位数图 qqplot(x,y):y对x的分位数-分位数图 contour(x,y,z):等高线图(画曲线时用内插补充空白的值) filled.contour(x,y,z):同上,等高线之间的区域是彩色的,并且绘制彩色对应的值的图例 image(x,y,z):同上,但是实际数据大小用不同色彩表示 persp(x,y,z):同上,但为透视图 stars(x):如果x是矩阵或者数据框,用星形和线段画出 symbols(x,y,...):在由x和y给定坐标画符号(圆,正方形,长方形,星,温度计式或者盒形图),符号的类型、大小、颜色等由另外的变量指定 termplot:(mod.obj)回归模型(mod.obj)的(偏)影响图 heatmap(x):热度图 

图形参数的修改:
1)通过par()函数指定下列参数值,调用格式:
par(optionname=value,optionname=value,…)

符号、线条和颜色参数:

pch:指定绘制点时使用的符号

这里写图片描述

cex:指定符号的大小,为数值,表示绘图符号相对于默认大小的缩放倍数。
lty:指定线条类型
lwd:指定线条宽度,默认1,用法同cex
col:指定绘图颜色
col.axis:指定坐标刻度文字的颜色
col.lab:指定坐标轴标签(名)颜色
col.main:指定标题颜色
fg:指定图形的前景色
bg:指定图形的背景色

文本属性与尺寸、

cex:指定文本的大小cex.axis:指定坐标轴刻度文字的缩放倍数cex.lab :指定坐标轴标签(名字)的缩放倍数cex.main:指定标题的缩放倍数cex.sub:指定副标题的缩放倍数font:指定绘图使用的字体样式,1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体font.axis/lab/main/subpin:以英寸表示图形尺寸(宽、高)mai(mar):用数值向量表示边界大小,顺序“下左上右”,单位英寸(英分  -- 1英分=1/12英寸 ~=2毫米) 

添加文本、自定义坐标轴和图例

1)通过参数:
main:添加标题
sub:副标题
xlab:横坐标轴标签(名字)
ylab:纵坐标轴标签
xlim:横坐标轴范围
ylim:纵坐标轴范围
注意:并非所有函数都支持上述选项,某些高级绘图中已经包含可用plot()或par()函数中添加ann=FALSE来移除
2)通过低级函数:
如title()、

axis():
[参数:side:在哪边绘制坐标,”下左上右“–c(1,2,3,4)at:绘制的位置,labels:刻度线旁加标签,pos:坐标轴绘制位置的坐标,las:标签是否平行(=0)或垂直(=2)于坐标轴,tck:刻度线的长度,负表示在外侧,正表示在内侧,0表禁用,1表示绘制网格线,col,lty,..]

minor.tick():
用来为坐标轴添加次要刻度线(要加载包:Hmisc),调用格式:minor.tick(nx=n,ny=n,tick.ratio=n,其中nx表示x上两个主刻度线
之间分成几个子区间,ny同nx,针对y轴,tick.ratio表示次要刻度线相对主要刻度线的大小比例)

abline():用来为图形添加参考线

例:使用低级绘图函数

x<-seq(from=0,to=1,by=0.1)
y1<-x
y2<-x^2
opar<-par(no.readonly = TRUE)
par(mar=c(5,4,4,8)+0.1)
plot(x,y1,type = “b”,pch=2,col=”blue”,yaxt=”n”,lty=2,ann=FALSE)#yaxt表示在y轴上不绘制刻度
lines(x,y2,type=”b”,pch=3,col=”red”,lty=3)
axis(side=2,at=y1,labels=x,col.axis=”blue”,las=2)
axis(side=4,at=y2,labels=round(x=y2,digits = 2),
col.axis=”red”,cex.axis=0.6,las=2,tck=0.01)
library(Hmisc)
minor.tick(nx=2,tick.ratio=0.5)

结果如图
这里写图片描述

添加文本、自定义坐标轴和图例
legend():用来添加图例
参数:location:用来指定图例的位置,给定图例在左上角的(x,y)坐标,可执行locator(1),然后通过鼠标单击给出图例的位置,可使用关键字bottom,bottomleft,left,topleft,top,topright,right,bottomright,center放置图例。
如果用了关键字,可同时使用inset指定图例向图形内侧移动的大小
title:图例标题的字符串(可选)
legend:图例标签组成的字符型向量
…..:其它选项,如果图例表示的颜色不同的线条,需要通过col指定颜色值组成的向量,如果图例表示的是符号不同的点,需要通过pch指定符号代码组成的向量,如果图例标示的是不同线条宽度或线条类型,需通过lwd和lty指定宽度值或类型值组成的向量。为图例创建颜色填充的盒形(主要用于条形图,饼图和盒须图),需通过fill指定颜色值组成的向量。
text():向绘图区域内部添加文本
mtext():向图形的四个边界之一添加文本
主要参数
location:文本位置参数,用法同上
pos:文本相对位置的方位,”下左上右“–c(1,2,3,4)
side:指定用来放置文本的边,”下左上右“同上
其它:cex,col,fontl也可被text和mtext调用
注意:text函数也可用来表示图形中的点,此时需要指定一系列(x,y)坐标表位置,同时以向量的形式指定要放置的文本。
例:

mtext(text = ‘y2=x^2’,side=4,line=3,cex.lab=1,las=2,col=”red”)
title(main=”TWO Funs”,xlab = “x value “,ylab = “y value “)
legend(“topleft”,inset=0.05,title=”Two Curves”,
c(“y1=x”,”y2=x^2”),lty=c(2,3),pch=c(2,3),col=c(“blue”,”red”),cex = 0.9)
这里写图片描述

添加文本标注
subcars<-mtcars[1:10,]
attach(subcars)
plot(mpg,disp,pch=2,main=”mpg vs disp”,col=”blue”)
text(mpg,disp,row.names(subcars),cex=0.8,pos=4)
detach(subcars)
这里写图片描述

0 0
原创粉丝点击