R实战笔记.docx
- 文档编号:18289405
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:78
- 大小:49.04KB
R实战笔记.docx
《R实战笔记.docx》由会员分享,可在线阅读,更多相关《R实战笔记.docx(78页珍藏版)》请在冰点文库上搜索。
R实战笔记
R实战笔记(转载)
1.R的使用
1.3.基础命令
函数
说明
example(‘foo’)
查看函数示例
data()
查看已加载可用的数据集
vignette(‘foo’)
查看主题为foo可用的vignette文档
getwd()
显示当前工作目录
setwd()
修改工作目录
ls()
显示工作空间的对象
rm(list=ls())
删除全部的对象
options()
显示或设置当前选项
history(n)
显示最近的n个命令
save.image(‘myfile’)
保存工作空间到myfile中,默认是.RData
load(‘myfile’)
读取一个工作空间到当前会话
source(‘file_name’)
在当前会话中执行一个脚本
sink(‘file_name’)
重定向输出到文件,append是否追加,split=T则同时输出到屏幕和文件中
object.size(x)/1000000
查看变量占用的内存空间,M
srirage.mode(x)
改变变量的存储类型
storage.mode(x)<-“integer”
改为整数型,可以看到该对象的大小会变为原来的一半
memory.size()
查看现在的workspace的内存使用
memory.limit()
查看系统规定的内存使用上限,注意,在32位的R中,封顶上限为4G,无法在一个程序上使用超过4G(数位上限)。
这种时候,可以考虑使用64位的版本
rm(object)
删除变量
gc()
做Garbagecollection,否则内存是不会自动释放的,相当于你没做rm.
rm(list=ls())
删除全部变量
图像输出
pdf(‘filename.pdf’)#重定向到图像输出
png(‘filename.png’)
jpeg(‘filename.jpeg’)
dev.off()#将输出返回到终端
2.数据结构
2.2.2.矩阵
matrix(vector,nrow=n,ncol=m,byrow=TRUE,dianames=list(rname,cname))
2.2.4.数据框
数据框绑定
attach()
detach()
with()
attach(mtcars)
plot(mpg,wt)
mpgdetach(mtcars)
with(mtcars,{
summary(mpg,disp,wt)
plot(mpg,disp)
plot(mpg,wt)
})
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
2.2.6.列表的引用
list[[n]]
4.数据管理
1.data.frame(col1,col2…,stringAsFactors=FALSE)
创建数据框的时候,不要将字符串转成因子
2.创建新变量
mydata=transform(mydata,
sumx=x1+x2,
meanx=(x1+x2)/2)
library(dplyr)
mutate(mydata,sumx=x1+x2,meanx=(x1+x2)/2)
∙1
∙2
∙3
∙4
∙5
∙6
4.3.变量重编码
!
x:
非x
x|y:
或
x&y:
与,和
isTRUE(x):
测试x是否为true
mydata$age[mydata$age==99]<-NA
mydata$agecat[mydata$age>=55&mydata$age<=75]<-'middleaged'
mydata=with(mydata,{
agecat<-NA
agecat[age>75]<-'elder'
agecat[age>=55&age<=75]<-'middleaged'
agecat[age<55]<-'young'})
#epicalc包的recode函数#看看有哪些因子水平,或者说不重复的取值
list=unique(data3$arpu)
#构建old列表
old<-c("(50,80)","(10,20]","0","(20,50]","(0,5]","(100,150]","(150,200]","(200,300]","(5,10]","[80,100]","300以上")
#构建new列表
new<-c("低值","低值","低值","低值","低值","高值","高值","高值","低值","高值","高值")
library(epicalc)
recode(vars="arpu",old,new,dataframe)
#recode函数其实是用new替换原来的old,所以建议先复制一列,然后在复制的列上进行recode操作
#R的cut函数
aaa<-c(1,2,3,4,5,2,3,4,5,6,7)
cut(aaa,3,dig.lab=4,ordered=TRUE)
∙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
4.4.变量重命名
#1
fit(mydata)#交互式修改`
#2library(reshape)
mydata=rename(mydata,
c(old_name1='new_name1',old_name2='new_name2',...))
#3
names(mydata)[2]='new_name'
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
4.5.缺失值
删除含有缺失值的行
na.omit(mydata)
4.6.日期
符号
含义
示例
%d
01-31天
%a
缩写的星期
Mon
%A
非缩写的星期
Monday
%m
月份
00-12
%b
缩写的月份
Jan
%B
非缩写的月份
January
%y
两位数的年份
07
%Y
4位数的年份
2007
as.Data(c('2007-06-22','2004-02-13'))
#系统日期
Sys.Date()
date()
format(Sys.Date(),format='%Y%m%d')
#日期加减
end_date-start_date
diff(today,that_day,units='weeks')
#lubridate包
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
4.8.排序
mydata=mydata[order[mydata$age),]
attach(mydata)
newdata=mydata[order(gender,-age),]detach(mydata)
∙1
∙2
∙3
∙4
∙5
4.9.合并数据集
#merge,一种内连接,innderjoin
total=merge(data1,data2,by=c('id','country'))
rbind()
cbind()
∙1
∙2
∙3
∙4
∙5
4.10.子集
mydata[,c(6:
10)]
mydata[,c(var1,var2,...)]
#丢弃变量
vars=names(mydata)%in%c('q3','q4')
mydata[!
vars]
mydata[c(-8,-9)]
#删除变量
mydata$q4<-NULL
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
4.10.进入观测
mydata=mydata[,1:
3]
mydata[which(mydata$gender=='M'&mydata$age>30),]
attach(mydata)
mydata[which(gender=='M'&age>30),]detach(mydata)
∙1
∙2
∙3
∙4
∙5
∙6
subset(mydata,age>=35|age<24,select=c(q1,q2,q3,q4))
subset(mydata,gender=='M'&age>25,select=gender:
q4)
∙1
∙2
∙3
4.11.随机抽样
#无放回随机抽样,抽10个样本
mydata[sample(1:
nrow(mydata),10,replace=FALSE),]
∙1
∙2
4.12.sql语句
library(sqldf)
newdata=sqldf('select*frommydatawherecarb=1orderbympg',row.names=TRUE)
new_data=sqldf('selectavg(mpg),avg(disp)asavg_disp,gearfrommtcarswherecylin(4,6)groupbygear')
∙1
∙2
∙3
∙4
5.高级数据管理
5.2.数值与字符处理函数
5.2.1.数学函数
函数
描述
abs(x)
绝对值
sqrt(x)
平方根
x^2
平方
ceiling(x)
向上取整
floor(x)
向下取整
trunc(x)
向零取整
round(x,digits=n)
直接截断保留n位小数
signif(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为底的对数,log(x)为自然对数,log10(x)为10常用对数
exp(x)
指数
5.2.2.统计函数
函数
描述
mean(x)
平均数
median(x)
中位数
sd(x)
标准差
var(x)
方差
mad(x)
绝对中位差
quantile(x,probs=c(0.3,0.84))
分位数
range(x)
范围
sum(x)
求和
diff(x,lag=n)
滞后差分
min(x),max(x)
最小最大值
scale(x,center=T,scale=T)
中心化(center=T)或标准化(center=T,scale=T)
其他均值和方差的标准化
scale(mydata)*sd+mean
5.2.3.概率函数
d=密度函数
p=分布函数
q=分位数函数
r=生产随机数(随机偏差)
分布名称
缩写
分布名称
缩写
正态分布
norm
非中心卡方分布
chisq
Beta分布
beta
logistic分布
logis
二项分布
binom
多项分布
multinom
柯西分布
cauchy
负二项分布
nbinom
指数分布
exp
泊松分布
pois
F分布
f
Wilcoxon符号秩分布
signrank
Gamma分布
gamma
t分布
t
几何分布
geom
均匀分布
unif
超几何分布
hyper
Weibull分布
weibull
对数正态分布
lnorm
Wilcoxon秩和分布
wilcox
设定随机数种子
set.seed(1234)
5.2.4.字符串处理函
函数
描述
nchar(x)
x的字符数量,注意和length(x)的区别
substr(x,start,stop)
提取或替换子字符串,substr(‘abcde’,2,4)<-‘22222’
grep(pattern,x,ignore.case=F,fixed=F)
正则表达式搜索,返回值为匹配的下标
sub(pattern,replacement,x,ignore.case=F,fixed=F)
搜索并替换,如果fixed=T,则pattern是一个文本字符串
strsplit(x,split,fixed=F)
在split处分割字符串,返回一个列表,用unlist()变成向量
paste(x,sep=”)
连接字符串,指定分隔符
toupper(x)
转大写
tolower(x)
转小写
5.2.5.其他实用函数
函数
说明
length(x)
长度
seq(from,to,by)
生产序列
rep(x,n,each=n)
将x重复n次,指定each将会排序
cut(x,n)
分割成n水平的因子
pretty(x,n)创建美观的分割点,在绘图中常用
cat(…,file=’myfile’,append=T)|连接…中的对象,并将其输出到屏幕或者文件中
5.3.apply-by系列
5.3.1.apply
#1=对每行操作,2=对每列操作
apply(mydata,margin=1,fun=myfunc)
∙1
∙2
5.3.2.by,分组汇总操作
#针对1:
4列,根据species因子分组,求均值
by(iris[,1:
4],Species,mean)
∙1
∙2
5.3.3.lapply
l=list(a=1:
10,b=11:
20)
lapply(l,mean)
∙1
∙2
5.3.4.sapply
lapply返回的是一个含有两个元素a和b的list,而sapply返回的是一个含有元素[[“a”]]和[[“b”]]的vector,或者列名为a和b的矩阵。
l=list(a=1:
10,b=11:
20)
l.mean=sapply(l,mean)
class(l.mean)#提取元素a的均值
l.mean[['a']]
∙1
∙2
∙3
∙4
∙5
5.3.5.tapply
attach(iris)#根据sprcies进行分类,计算petal的均值
tapply(iris$Petal.Length,Species,mean)detach(iris)
∙1
∙2
∙3
∙4
7基本统计分析
7.1.1描述性统计分析
#1.查看一般的统计量
vars=c('mpg','hp','wt')
summary(mtcars[vars])
#2.对一列或多列应用多个函数
myfunc<-function(x,na.omit=Flase){
if(na.omit)
x=x[!
is.na(x)]
m=mean(x)
n=length(x)
s=sd(x)
skew=sum((x-m)^3/s^3)/n
return(c(n=n,mean=m,stdev=s,skew=skew))
sapply(mtcars[vars],myfunc)
#3.其他包里面的描述性统计量library(Hmisc)
describe(mtcars[vars])
library(psych)
describe(mtcars[vars])
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
∙14
∙15
∙16
∙17
∙18
∙19
∙20
∙21
∙22
∙23
∙24
7.1.2分组汇总
vars=c('mpg','hp','wt')
#1.简单的aggregate
aggregate(mtcars[vars],by=(am=mtcars$am,vs=mtcats$vs),mean)
#2.一般化的by
myfunc=function(x)(c(mean=mean(x),sd=sd(x)))
by(mtcars[vars],mtcars$am,myfunc)
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
7.2.1列连表分析
library(vcd)
mydata=Arthritis
#1.一维列联表#1.1生成频数统计表
mytable=with(mydata,table(Improved))
#1.2将频数统计转成百分比
prop.table(mytable)
#2.二维列联表#2.1table的用法
mytable=table(A,B)
#2.2xtable的用法
mytable=xtabs(~A+B,data=dataframe)
mytable=xtabs(~Treatment+Imporved,data=mydata)
#2.3添加边际和
addmargins(mytable)
#2.4转成百分比
prop.table(mytable)
#3.三维列联表
mytable=xtabs(~Treatment+Imporved+Sex,data=mydata)
∙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
7.2.2检验类别型(分类型变量)独立性的方法。
1.卡方独立性检验
2.Fisher精确检验
3.Cochran-Mantel-Heanszel卡方检验
#1.卡方检验library(vcd)
mydata=Arthritis
#1.2先转列联表
mytable=xtabs(~Treatment+Imporved,data=mydata)
chisq.test(mytable)
#p<0.05,说明不独立。
#2.Fisher精确检验的原假设是:
边界固定的列联表中行和列是相互独立的。
fisher.test(mytable)
#p<0.05,说明不独立。
#3.Cochran-Mantel-Heanszel卡方检验的原假设是:
两个名义变量在第三个变量的每一层中都是条件独立的。
mytable=xtabs(~Treatment+Imporved+Sex,data=mydata)
mantelhean.test(mytable)
#p<0.05,说明不独立。
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
∙14
∙15
∙16
∙17
∙18
∙19
∙20
7.2.3相关性的度量
既然变量不独立,那么如何衡量相关性的强弱呢?
library(vcd)
mydata=Arthritis
#先转列联表
mytable=xtabs(~Treatment+Imporved,data=mydata)
assocstats(mytable)
#phi系数,列联系数,Cramer'sV系数,越大说明相关性较强。
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
7.3相关
描述定量变量之间的关系。
包括pearson系数,Spearman系数,Kendall相关系数,偏相关系数,多分格(polychoric)系数和多系列(polyserial)相关系数。
7.3.1pearson,spearman,kendall相关
∙pearson:
描述两个变量之间的线性相关程度
∙spearman:
描述分级定序变量之间的相关程度
∙Kendall’sTau:
也是一种非参数的等级相关度量
mydata=state.x77[,1:
6]
#1.pearson相关
cor(mydata)
#2.spearman相关
cor(mydata,method='spearman')
#3.kendall相关
cor(mydata,method='kendall')
#注意:
得到相关系数后,还需要对相关系数进行独立性检验。
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
7.3.2偏相关
指控制一个或多个变量,看另外两个变量之间的相互关系。
library(ggm)
pcor(c(1,5,2,3,6),cov(mydata))
#c(1,5,2,3,6):
前面两个是要计算的偏相关的变量的下标,剩余的是要控制(排除影响)的变量下标。
∙1
∙2
∙3
∙4
7.3.3相关性的显著性检验
常用的原假设是:
变量间不相关(即总体的相关系数为0)。
cor.test(mydata[,3],mydata[,5])
#p<0.05,说明真的是存在相关性。
#如果总体相关系数小于0,加参数alternative='less',大于0则alternative='greater',默认是双侧检验(two.side)#参数method='pearson(默认),spearman,kendall'
∙1
∙2
∙3
∙4
∙5
#一次计算全部变量的相关系数和显著性检验library(psych)
corr.test(mydata,use='complete')
#得到correlationmatrix(相关系数矩阵),probilityvalue(显著性P值矩阵)
∙1
∙2
∙3
∙4
∙5
#偏相关的检验library(psych)
corr_value=pcor(c(1,5,2,3,6),cov(mydata))
pcor.test(r,q,n)#r即corr_value#q是要控制的变量数(以数值表示位置)#n是样本的大小
∙1
∙2
∙3
∙4
∙5
∙6
∙7
7.4t检验
研究中最常见的就是对两个组进行比较,包括用没有某种方法,药物,同一种方法前后的变化,两种不同药物的比较,两种不同工艺良品率的比较等。
这里关注结果变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实战 笔记
![提示](https://static.bingdoc.com/images/bang_tan.gif)