R语言基础の笔记
R 语言基础
1.一维数据结构-概念介绍
- 数据类型
- character:字符型
- numeric:数值型,指实数或小数
- integer:整型
- complex:复数型
- logical:逻辑型
- 数据结构
- 向量(对应数值变量)、因子(对应分类变量)
- 矩阵(内部数据类型一致)、数据框(内部每个向量内数据类型一致)
- 数组(三维、更高维)、列表(可包含不同结构类型元素)
- 向量
- c()
- 冒号操作符:
- seq(from, to, by, lenth.out, along.with)
·提取子集 - 数字下标(正数、负数)
- which()函数
- 因子
- factor()
- gl()
2.一维数据结构-代码演示
- 等号=跟<-是一样的赋值操作符
- (x=c(10,11,13,14)),最外的括号表示立即输出
- Ctrl+Enter为单行执行
- 因子的水平(level)在R语言内部用数字表示
- 一维数据结构
3.二位数据结构——矩阵
- 行和列
- 生成矩阵
- matrix()
- 由向量派生
- 由向量组合生成
- 操作
- 访问元素
- 行、列命名
- 矩阵运算:向量运算按照矩阵运算统一
- 加减运算
- 乘法运算:数乘、对应元素相乘、矩阵乘法
- 单位矩阵、对角矩阵
- 矩阵转置
- 矩阵的特征值和特征向量
- 矩阵的逆
- 求解线性方程组
4.二位数据结构——数据框
- 记录和域
- 创建数据框 data.frame()
- 操作:
- 访问元素 $、[[]]
- attach、detach
- with、within
- subset
5.高维数据结构——列表和数组
- 列表中:成分
- 创建列表:list()
- 操作:
- 列表成分names
- []、[[]]
- 数组:不同于其他语言的数组,是矩阵的延伸
6.数据类型转换
- 类型转换
- 安全级别:字符>数字>布尔(更安全)
- is.character、as.character…
- 数据结构
- is.mastrix、as.mastrix…
7.分支结构
- if … else …结构
1
2
3
4
5
6if(condition){
...
}
else{
...
} - ifelse()函数,支持向量化计算
ifelse(b,u,v)
8.循环结构
- for(n in x){…} (x是向量)
- while(codition){…}
- repeat{… break}
- break、next
9.函数和包:代码重用
- 自定义函数:(一类对象,可以随时创建)
1
2
3myfun=function(par1,par2..){
......
} - 查看函数代码
- 不带括号的函数名
- page
- source函数加载文件(保存成.r文件)
source('E:/rTEST/06.function.r')
10.向量化运算和apply家族
- 向量化运算
- +-*/四则运算
- <!=逻辑运算
- apply家族
- apply
- sapply、lapply
- mapply、tapply
建立对数据的感性认识
1.变量类型
- 连续变量(数值变量)
- 离散变量(名义变量、分类变量)
2.数据分布
4.离散变量的典型分布
- 0-1分布
- 二项分布
- 泊松分布(n很大,p很小时对二项分布的近似)
5.单变量的集中趋势描述
- 集中趋势:一组数据向着一个中心靠拢的程度,也体现了数据中心点所在位置。
- 分类变量
- 众数
- 连续变量
- 均值(算数平均数、几何平均数、加权平均数)
- 中位数
- 分位数
- 被滥用的均值
- 非单峰分布
- 极值的影响
- 简单的算术平均
6.单变量的离散程度描述
- 离散程度:一组数据远离其中心的程度。
- 集中趋势从数据中选“典型代表”,“代表是否够典型”由离散程度检验。
- 离散统计量
- 极差
- 方差、标准差
- Z分数
- 变异系数
- 偏度(Skewness)描述某变量取值分不对称性。
- 对称(=0)
- 左偏(<0)均值落于中位数左侧,极小值多
- 右偏(>0)均值落于中位数右侧,极大值多
- 峰度(Kurtosis)描述某变量所有取值分布形态陡缓程度。
- 正态分布(0、3)
- 尖顶峰(>0、3)
- 平定峰(<0、3)
7.双变量的统计描述
- 相关性:两个变量共同变化的趋势。(是否有线性关系,相关不代表因果,正/负不代表相关性强弱)
- 正相关、负相关、线性无关
- 协方差 Cov(X,Y)=E[(X-E[X])(Y-E[Y])]=E[XY]-2E[Y]E[X]+E[X]E[Y]=E[XY]-E[X]E[Y]
- 相关系数 ρXY=Cov(X,Y)/(D(X)^0.5*D(Y)^0.5) (-1~1之间)
- 协方差矩阵(对角线都是1,对称矩阵)
8.产生符合特定分布的测试数据
- 分布函数家族:*func()
*:
+ r:随机分布函数
+ d:概率密度函数
+ p:累积分布函数
+ q:分位数函数
1 | # 1.生成符合特定分布的数据 |
9.R的单变量统计函数
- 均值:mean
- 中位数:median
- 分位数:quantile
- 方差:var
- 标准差:sd
- 频数表:table
- 峰度
- 偏度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50# 2.单变量的描述统计
str(airquality)
summary(airquality)
mean(airquality$Ozone,na.rm=T) #变量中有NA(缺失值)时删除NA
median(airquality$Ozone,na.rm=T)
mean(airquality$Temp,na.rm=T,trim=.01) #trim是按百分比裁剪极值
temp100=rnorm(100,30,1)
w=1:100
(wtm=(weighted.mean(temp100,w,na.rm=T))) #加权平均数
x=c(.045,.021,.225,.018)
(xm=mean(x))
(xg=exp(mean(log(x)))) #几何平均数
(tmid=median(temp100,na.rm=T)) #中位数
quantile(airquality$Temp,na.rm=T) #分位数
quantile(airquality$Temp,probs=c(0,0.1,0.9,1))
(tv=var(temp100)) #方差
(ts=sd(temp100)) #标准差
fivenum(temp100)
# 自定义偏度、峰度计算函数
apply(airquality[,c(-5,-6)],2,FUN=mean,na.rm=T)
sapply(airquality[,c(-5,-6)],FUN=mean,na.rm=T)
mysummary=function(x,...){
Av=mean(x,na.rm=T)
Sd=sd(x,na.rm=T)
N=length(x[!is.na(x)])
Sk=sum((x[!is.na(x)]-Av)^3/Sd^3)/N
Ku=sum((x[!is.na(x)]-Av)^3/Sd^4)/N-3
result=c(avg=Av,sd=Sd,skew=Sk,kurt=Ku)
return(result)
}
sapply(airquality[,c(-5,-6)],FUN=mysummary,na.rm=T)
# 非单峰分布不能简单计算均值
x=rnorm(100,50,6)
y=rnorm(200,150,8)
z=c(x,y)
plot(density(z))
abline(v=mean(z),col=3,lw=3)
10.R的双变量相关函数
- 协方差:cov
- 相关系数:cor
- 确实值处理:行删除、配对删除
1
2
3
4
5
6# 3.双变量的相关性
cov(airquality[,-5:-6],use='pairwise.complete.obs') #配对删除
cov(airquality[,-5:-6],use='complete.obs') #行删除
cor(airquality[,-5:-6],use='pairwise.complete.obs') #配对删除
cor(airquality[,-5:-6],use='complete.obs') #行删除
11.统计量的可视化
- 散点图
- 盒线图
- 直方图
- 核密度图
- 柱状图、条形图
- 饼图
- 点图
- 散点图集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29# 散点图
plot(airquality$Ozone)
plot(airquality$Ozone,airquality$Wind)
# 箱线图
boxplot(airquality$Temp)
boxplot(airquality$Temp,horizontal = T)
# 直方图
hist(airquality$Temp)
hist(airquality$Temp,breaks=30) #横轴块数
hist(airquality$Temp,prob=T) #纵轴从频数变成频率
# 密度
plot(density(airquality$Temp))
hist(airquality$Temp,prob=T)
lines(density(airquality$Temp),col=3,lw=4)
# 柱状图
barplot(table(airquality$Month))
barplot(table(airquality$Month),horiz = T)
# 饼图
pie(table(airquality$Month))
# 图集
plot(airquality[,1:4])
pairs(airquality[,1:4])
数据的组织和整理——输入和输出
1.基本输入输出
- 输入
1)readline
2)edit、fix - 输出
1)print
2)cat - 输出重定向
1)sink1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# 基本输入输出
# 输入
x=readline('你好:')
x
mydata=data.frame(name=character(0),age=numeric(0),height=numeric(0))
mydata=edit(mydata) #注意要用=把临时变量赋回来
mydata
fix(mydata)
mydata
# 输出
x=rnorm(10,100,2)
print(x) #输出有编号,末尾自带换行符
cat(x) #更紧凑,无编号,可以打印到文件中
print(x,digits=4) #输出格式
print('helloword 1');print('welcome to R')
cat('hello world 1');cat('welcome to R') #输出末尾无换行符
cat(format(x,digits=3),'\n') #输出格式,换行符
cat('hello world',file='d:/app.log')
sink('d:/output.txt') #执行后,之后的print、cat输出都会被重新向到文件中
print('hello')
cat('sdfjksdf','\n')
sink()
2.模拟数据和自带数据集
- 模拟数据
- 自带数据集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29# 任意分布
# y=a*x+b+e
# x~N(0,2)
# e~N(0,1)
# b=0.5, a=2
set.seed(10) # 随机种子,用来产生相同的随机数
x=rnorm(100,0,2)
e=rnorm(100)
y=2*x+0.5+e
plot(x,y)
# 生成随机数
(x=rbinom(5,100,0.7))
(x=rbinom(5,100,0.7))
set.seed(10)
(x=rbinom(5,100,0.7))
(x=rbinom(5,100,0.7))
set.seed(10)
(x=rbinom(5,100,0.7))
(x=rbinom(5,100,0.7)) # 跟上面相同
data(package='datasets')
data()
# 查看系统所有包中的数据集
data(package=.packages(all.available = T))
library(arules)
3.文件数据源
- 文本文件:read.table read.csv read.delim
- Excel文件:四种方法
- SPSS文件:foreign::read.spss、Hmisc::spss.get
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# 文件数据源
getwd() #查看当前工作目录
setwd('d:/') #更改当前工作目录
x=rnorm(1000,10,2)
y=rnorm(1000,10,2)
z=rnorm(1000,10,2)
save(x,y,z,file='xyz.Rdata')
l=load('xyz.Rdata')
l # l=变量名字列表
x=read.table('xyz.Rdata',header=F,seq='',comment.char='@')
x
str(x)
x=read.csv('scan0.txt',header=F,seq='')
x=read.delim('scan0.txt',header=F) #这几个red都一样,只是参数缺省值不同
x=read.delim('clipborad',header=F) #从剪切板读
write.table(x,'d:/scan2.txt',seq=',',quote=F,col.names=T)
# Excel文件
# 1.csv文件
# 2.剪切板+read.delim
# 3.xlsx扩展包
# 4.rodbc数据源
library(foreign) #这个包提供了read.spss方法
cars=read.spss('d:/car_sales.sav')
library(Hmisc) #简单方法,需要额外装这个包
cust=spss.get('d:/car_sales.csv',use.value.labels=T)
4.关系型数据库(MySQL)
- ODBC方式(开放数据库连接(Open Database Connectivity)定义了访问数据库API的一个规范)
- RMySQL方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46#RMySQL
install.packages('RMySQL')
library(RMySQL)
conn = dbConnect(MySQL(),dbname='rtest',username='rtest',password='rtest',host="192.168.1.100",port=3306)
dbListTables(conn)
dbListFields(conn,'t_user')
summary(MySQL(),verbose=T)
users=dbReadTable(conn,'t_user')
str(users)
users
tmpUser=data.frame( name=paste('user',1:100,sep=''),
age=rnorm(100,50,5))
tmpUser
dbWriteTable(conn,'t_user',tmpUser,append=T,row.names=FALSE)
dbWriteTable(conn,'t_stu',tmpUser,append=T)
dbReadTable(conn,'t_stu')
res=dbGetQuery(conn,'select * from t_user where age>10')
res
res=dbSendQuery(conn,'show databases')
dl=fetch(res)
dl
dbDisconnect(conn) # 断开连接
#RODBC mysqlodbc驱动要装,system32文件下odbcad32.exe
install.packages('RODBC')
library(RODBC)
conn=odbcConnect("mysqlodbc")
conn=odbcConnect("mysqlodbc", uid="rtest", pwd='rtest')
sqlTables(conn)
users=sqlFetch(conn,'t_user')
users
str(users)
users=sqlQuery(conn,'select * from t_user where age>15')
users
odbcClose(conn)
数据的组织和整理——数据预处理(1)
1.日期时间、字符串的处理
·日期和时间
- Date:日期类
- POSIXct:日期时间类,精确到秒。内部用数字表示
1 | # 得到当前日期时间 |
- 字符串
- nchar(),length()
- paste(),outer()
- substr(),strsplit()
- Sub(),gsub(),grep(),regexpr(),grepexpr()
- POSIXlt:日期时间类,精确到秒。内部用列表表示
- Sys.date(),date(),difftime(),ISOdate(),ISOdatetime()
1 | x='hello\rwld\n' |
2.数据预处理概念
- 数据预处理的意义
·数据质量- 准确性,完整性,一致性,冗余性,时效性……
- 数据预处理的内容
- 数据集成,数据转换,数据清洗,数据简约
- 数据清洗时又脏又累的活
3.数据集成
- merge #数据框合成
- pylr::join # 包名::函数
1
2
3
4
5
6
7
8
9
10
11
12
13(customer=data.frame(Id=c(1:6),State=c(rep("北京",3),rep("上海",3))))
(ol=data.frame(Id=c(1,4,6,7),Product=c('IPhone','Vixo','mi','Note2')))
merge(customer,ol,by=('Id')) # inner join
merge(customer,ol,by=('Id'),all=T) # full jion 全连接
merge(customer,ol,by=('Id'),all.x=T) # left outer jion 左连接
merge(customer,ol,by=('Id'),all.y=T) # right outer jion 右连接
# union 去重 在df1和df2有相同的列名称下
rbind(df1,df2) # 不去重合并
merge(df1,df2,all=T) # 去重合并
merge(df1,df2,by=('id')) # 显示id相同的行
4.数据转换
- 构造属性
- 规范化(极差化、标准化)
- 离散化
- 改善分布
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46str(airquality)
head(airquality,3)
# 排序
airquality=airquality[order(airquality$Temp),]
head(airquality,5)
tail(airquality,5)
# 构造属性
quantile(airquality$Temp,probs=c(0,0.3,0.6,1.0))
airquality$isHot=ifelse(airquality$Temp>80,T,F)
airquality=within(airquality,{TempL=NA
TempL[Temp>80]='Hot'
TempL[Temp>70&Temp<=80]='Warm'
TempL[Temp<=70]='Cold'
})
airquality$TempL
airquality$TempL=factor(airquality$TempL,levels=c('Cold','Warm','Hot',ordered=TRUE))
unclass(airquality$TempL)
# 数据规范化
tmp=data.frame(TC=scale(airquality$Temp,scale=F),
TZ=scale(airquality$Temp))
tmp
# 连续变量变离散变量
airquality=within(airquality,{
TempL1=cut(Temp,breaks=c(56,73,81,97),include.lowest = T)
})
head(airquality,5)
airquality$TempL1
airquality=within(airquality,{
TempL1=cut(Temp,breaks=quantile(Temp,probs=c(0,0.3,0.7,1)),include.lowest = T)
})
table(airquality$TempL1)
prop.table(table(airquality$TempL1))
library(Hmisc)
airquality=within(airquality,{
TempL3=cut2(Temp,g=4)
})
数据的组织和整理——数据预处理(2)
1.发现缺失值
- 缺失值的表达方式:NA(没有数字)、NaN(无效的数字,如1/0)、Inf(正无穷)、-Inf(负无穷)
- 发现缺省值:summary(),is.na(),complete.case()
- 缺失值是否有业务含义
- 把不合理数据编码为确实值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 没有意识到“缺失值问题”的时候就得到的答案
library(VIM)
sleep.lm=lm(Dream~Sl)
# 发现缺失值
# 1.属性级别
is.na(sleep$Sleep) # 返回的是向量,可用于提取
sleep$Sleep[is.na(sleep$Sleep)]
sleep$Sleep[!(is.na(sleep$Sleep))]
mean(is.na(sleep$Sleep)) #缺失值比例
# 2.记录级别
complete.cases(sleep) #在记录级别来识别
# 数据集拆分
sleep.cleaned=sleep[complete.cases(sleep),] #拆分出没有缺失值的数据
#sleep.cleaned=na.omit(sleep)
sleep.cleaned=sleep[complete.cases(sleep),] #拆分出有缺失值的数据
2.缺失值模式
- 完全随机缺失 Missing Completely At Random, MCAR(缺失跟其他变量、跟自己都没关系)
- 随机缺失 Missing At Random, MAR (缺失跟其他变量有关系,跟自己没关系)
- 非随机缺失 NMAR (既跟其他变量有关系,也跟自己有关系)
- VIM包
- mice包
1
2
3
4
5
6
7# 3.概要信息
library(mice)
md.pattern(sleep)
aggr(sleep,number=T,prop=F)
matrixplot(sleep)
marginplot(sleep[,c('Dream','Sleep')])
3.删除确实值
- 分析函数
- na.rm=T (=T计算这条函数时不考虑缺失值,但不是删除,=F包含缺失值)
- 行删除
- na.omit
- 配对删除 (多个分析中数据可能来自不同的数据集
- 典型函数cor(data.use=”pairwise.complete.obs”)
1
2na.omit(sleep) # 整行删除
cor(sleep,use="pairwise.complete.obs") # 配对删除
- 典型函数cor(data.use=”pairwise.complete.obs”)
4.填补缺失值
- 简单抽样填补
- 均值填补
- 回归填补
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# 简单随机抽样填充
sub.index=which(is.na(sleep$Sleep)==T)
sleep.clean=sleep[-sub.index,]
sleep.na=sleep[sub.index,] # 数据集的拆分
sleep.na$Sleep=sample(sleep.clean$Sleep,
nrow(sleep.na),replace = T) # 抽样(抽样范围,抽样条数,有放回抽样)
# 均值填充
sub.index=which(is.na(sleep$Dleep)==T)
sleep.clean=sleep[-sub.index,]
sleep.na=sleep[sub.index,]
sleep.na$Dream=mean(sleep.clean$Dream)
# 回归填充
sub.index=which(is.na(sleep$Sleep)==T)
sleep.clean=sleep[-sub.index,]
sleep.na=sleep[sub.index,]
sleep.lm=lm(Sleep~Gest+Exp,data=sleep)
sleep.na$Sleep=round(predict(sleep.lm,sleep.na),2) # round(,2)保留小数点后两位
# 用哪两个变量做回归填充预测
cor(cleep,use="pairwise.complete.obs")
library(corrgram)
corrgram(cor(sleep,use="pairwise.complete.obs"),
lower.panel.panel.conf,upper.panel=panel.pie) # 看Sleep这一列,sleep跟哪两个相关性最强
数据可视化——基础绘图体系
1.图形设备
- 图形设备
- pdf,png,jpeg,bmp
- win.metafile,postscript
- dev.off
- 高水平绘图函数
- plot,pairs,hist
- 低水平绘图函数 (需要依托于高水平函数)
- points,lines,text,abline,legend,title,axis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23plot.women=function(){
plot(women$height,women$weight,
main='height-weight',
xlab='height',
ylab='weight',
col='red', # 点颜色
pch=19, # 点的状态
xlim=c(0,100), #x坐标范围
ylim=c(100,200))
}
plot.line=function(){
lines(women$height,women$weight,col='blue')
}
plot.women()
pdf('d:/women.pdf') # 图都绘制到pdf设备中了
plot.women()
dev.off() # 及时关闭文件设备
plot.women()
plot.line()
- points,lines,text,abline,legend,title,axis
2.数值型单变量的可视化(箱线图和直方图)
- 箱线图
- 分组箱线图
- 直方图
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 箱线图
bp.info=boxplot(airquality$Ozone,main='OZone',horizontal=T,axes=T) #有返回值,horizontal方向,axes是否显示坐标轴
abline(v=mean(airquality$Ozone,na.rm = T),col='red',lty='dotted')
bp.info
# 分组箱线图
bp.info=boxplot(airquality$Ozone~airquality$Month,main='OZone',horizontal=T,axes=T)
# 直方图
ht.info=hist(airquality$Ozone,breaks = 20,freq = F) #breaks=区间数量,freq=纵坐标频数/频率
lines(density(airquality$Ozone,na.rm = T))
3.数值型单变量的可视化(密度图和小提琴图)
1 | hist(airquality$Ozone,breaks = 20,freq = F) #breaks=区间数量,freq=纵坐标频数/频率 |
数据可视化——多变量关系可视化
1.双变量的可视化
- 连续型双变量
- 连续型变量+离散型变量
- 离散型变量
- 散点图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31x=rnorm(1000)
y=rnorm(1000)
plot(x,y,cex=1,pch=19,col='red',main='XY散点图') #cex点的大小,pch点的形状
x=rbinom(10000)
y=rbinom(10000,10,0.1)
plot(x,y,cex=1,pch=19,col='red',main='XY散点图') # 点重叠,丢失密度信息
sunflowerplot(x,y,cex=1,col='red',main='XY散点图') #太阳花法
plot(jitter(x),jitter(y),cex=1,col='red',main='XY散点图') #加入抖动
#install.packages('scatterplot3d')
library(scatterplot3d)
s3d=scatterplot3d(airquality$Temp,airquality$Wind,airquality$Ozone
highlight.3d=TRUE,col.axis='blue',
col.grid="lightblue",angle=30)
attach(airquality)
plot(Wind,Temp)
# 1.一元线性回归
alm=lm(Temp~Wind)
abline(alm$coefficients)
#2.局部加权回归
alowess=loess(Temp~Wind)
ord=order(Wind)
lines(Wind[ord],alowess$fitted[ord],lwd=1,col=2)
detach(airquality)2.多变量的可视化
- 矩阵散点图
- 相关系数图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 矩阵散点图
str(airquality)
pairs(~Ozone+Solar.R+Wind+Temp,data=airquality)
plot(~Ozone+Solar.R+Wind+Temp,data=airquality)
# 矩阵散点图中加线
library(car)
scatterplotMatrix(~Ozone+Solar.R+Wind+Temp,data=airquality,lty.smooth=2,spread=T)
#相关系数图
library(corrgram)
corrgram(airquality[,c(-5,-6)],
lower.panel=panel.pie,
upper.panel=panel.conf,
text.panel=panel.txt)
3.分组可视化
- Lattice绘图体系
- 面板和面板函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39unique(iris$Species)
par(mfrow=c(2,2)) #定义3行1列布局
by(iris,iris$Species,FUN=function(data){
plot(data$Sepal.Length,data$Sepal.Width,main=unique(data$Species))
})
# Lattice包
library(lattice)
head(iris,3)
xyplot(Sepal.Length~Sepal.Width,data=iris)
plot(Sepal.Length~Sepal.Width,data=iris)
xyplot(Sepal.Length~Sepal.Width,data=iris,groups=Species)
xyplot(Sepal.Length~Sepal.Width | Species,data=iris) #分组
# 箱线图
bwplot(Sepal.Length~Species,data=iris)
bwplot(~Sepal.Length | Species,data=iris)
# 直方图
histogram(~Sepal.Width | Species,data=iris)
# 密度图
densityplot(~Sepal.Width | Species,data=iris)
densityplot(~Sepal.Width,groups=Species,data=iris)
# 带状图
stripplot(Species~Sepal.Width,data=iris)
# 平行坐标图
parallelplot(~iris[1:4] | Species,iris)
parallelplot(~iris[1:4],groups=Species,iris,horizontal.axis = F)
# 3D图
cloud(Ozone~Wind*Temp|Month,data=airquality)
- 面板和面板函数
4.自定义面板函数实例
1 | panel.myplot=function(x,y){ |