序
授课教师: 浙江中医药大学-郑卫军
微信公众号: 郑老师统计课程、医学论文与统计分析
安装R包:install.package("R包名")
加载R包:library(R包名)
R程序
有多行代码组成,是由命令和结果名组成
【例: Lg<-log(10) # 计算10的自然对数值
】
(1)Lg为结果名,log(10)为命令
(2)代码区分大小写,Lg与lg不同
(3)命令主要为函数形式,即函数名(参数)
(4)结果名主要是数据或统计分析结果集合的标签
(5)<-
是赋值符号,将后面命令产生的结果打包给前面的结果名,如果结果无需打包,则可不输入赋值符号和结果名,如:log(10)
(6)#
后方是对程序的注释或解释
(7)# 节名 ####
可将程序分节
1、分析结果与运行
(1)分析结果:
结果名
【例:Lg
】
(2)运行:
选中要运行的命令,点击右上角的"RUN"
2、函数
函数名(参数)
(1)计算标准差: sd()
(2)产生连续数据:seq(首位,尾位,间隔数)
【seq函数实际有5个参数,不过后三个均可缺省】
3、运算符
(1)加减乘除:+ - * /
(2)平方根:sqrt()
(3)对数:log2() log10()
(4)余数:%%
(5)整除:%/%
(6)幂指数:^
(7)等于、不等于、大于、大于等于、小于、小于等于:== !== > >= < <=
【运行后返回逻辑型结果,即TURE或False】
R数据
1、语法
(1)直接产生数据集:
数据集名 <- c(数1,数2,数3....)
数据集名 <- c("字符串1","字符串2","字符串3"....)
(2)连续等距数据:
数据集名 <- 首位整数 : 末位尾数
【seq(首位整数,末位尾数)
也可以】
(3)因子列表展示/因子的汇总:
table(数据集名)
summary(数据集名)
(4)查看某一数据集类型:
class(数据集名)
(5)查看某一数据集因子的分组水平:
levels(数据集名)
(6)数值型分类变量转换为因子:
factor(数据集名)
as.factor(数据集名)
2、R数据的类型
(1)根据变量值特性进行分类:
数字(num);整数(int);虚数(cplx);逻辑(logi);字符(chr)
【可用class(数据集名)
鉴定数据类型】
(2)根据变量属性进行分类:
数值变量数据(包含整数型和数值型);分类变量数据(factor,又称因子,包含整数型、字符型和逻辑型)
【1,2这种整数也可能是分类变量,因为分类变量常用整数变量表示,即“男”“女”用1和2表示,便于统计展开】
(3)对于字符串型分类数据,R语言直接认定为因子;但对于整数型分类数据,R语言很多情况下认定为数值变量,此时需要用factor(数据集名)
或as.factor(数据集名)
将其转型为因子
【可通过factor(数据集名) , levels=c(因子1,因子2,因子3....)
对因子顺序重新排列】
【例:f1 <- factor(c(1,2,1,3,2,4)) , levels=c(2,1,3,4)
】
R语言分析对象
R语言主要分析的对象是数据集,R语言的数据集主要包括向量、矩阵、数据框、列表、数组等
1、向量Vector(一维数据)
(1)向量是最基本的数据对象类型,可以是数值型、字符型、逻辑值型、复数型
(2)在医学数据分析中,向量相当于一个变量,向量名为变量名,向量值为变量值
(3)通过函数c()
实现向量创建:
向量集名 <- c(向量1 , 向量2 , 向量3 .... )
(4)向量索引(子集提取):
一般用中括号[ ],根据元素所在位置或名称提取。
向量子集的提取常见包括:位置的提取、根据值大小提取、名称的提取、采用subset()函数提取
①、下标索引(直接位置提取法):
向量集名[下标]
#返回该向量集中第下标的元素
向量集名[-下标]
#返回该向量集中除第下标外的所有元素
向量集名[c(下标1:下标2)]
#返回该向量集中第下标1至第下标2个元素
向量集名[-c(下标1:下标2)]
#返回该向量集中除第下标1至第下标2个外的所有元素
②、which元素位置法(先取位置,再索引):
先通过函数which()返回逻辑为TURE的位置,在用位置提取元素:
which.max(向量集名)
#返回向量集中最大值所在位置
which.min(向量集名)
#返回向量集中最小值所在位置
向量集名[which.max(向量集名)]
#返回向量集中最大的元素
向量集名[which(向量集名>1&向量集名<3)]
#返回向量集中满足逻辑(即大于1且小于3)的子集
③、逻辑判断提取法(根据值大小提取):
向量集名[向量集名>1&向量集名<3]
#返回向量集中满足逻辑(即大于1且小于3)的子集
向量集名[向量集名==1]
#返回向量集中满足逻辑(即等于1)的元素
④、根据名称索引:
先给向量中各元素命名,再通过名称访问对应的元素
names(向量集名) <- c("名称1","名称2","名称3"....)
向量集名[c("名称1","名称2")]
#返回向量中名称1、2对应的元素
⑤、subset生成子集(检索向量中满足条件的元素):
subset(向量,向量>1&向量<2)
#提取向量中满足逻辑(即大于1小于2)的子集
(5)向量编辑:
对已创建向量进行增加或删除元素
①、增加元素:
新向量集名 <- c(旧向量集名,c(向量1,向量2....))
#在旧向量集后面加向量1,2,并构成新向量集
②、删除元素:
新向量集名 <- 旧向量集名[-c(向量1,向量2....])
#从旧向量集后面删去向量1,2,并构成新向量集
(6)向量排序:
sort(向量集名,decreasing=T/F,na.last=T/F)
【默认decreasing为F,即升序排序;decreasing为T则降序排序;na.last默认为F,若为T则将向量集的NA值放到序列末尾】
(7)向量基本运算:
①、求长度:length(向量集名)
②、计算均数:mean(向量集名)
③、计算标准差:sd(向量集名)
④、计算总计:sum(向量集名)
⑤、计算中位数:median(向量集名)
2、矩阵Matrix(二维数据)
(1)矩阵是二维数组,可以描述二维数据,要求矩阵内各元素有相同的类型,都是数值型、字符串型。
【在医学数据分析中,很多时候数据集不太会是矩阵,矩阵一般作为数据分析的结果】
(2)创建矩阵:
矩阵名 <- matrix(向量集名,nrow=...,ncol=...,byrow=T/F,dimnames=list(c("行名1","行名2"....),c("列名1","列名2"...)))
【由向量集填充入该矩阵,nrow为行数;ncol为列数;byrow设置是否按行填充,默认为F,即按列填充;dimnames用字符型向量表示矩阵的行名和列名】
【向量集名那里可以是c()
,也可以直接是首位:末尾
,如:1:8
】
【只写行/列也可以,会把向量集中的所有数据按行/列导入矩阵】
【nrow,ncol这些都不写,括号里只写行、列数即可】
(3)矩阵索引(子集提取):
利用[ , ]分别提取行和列,主要的提取方式包括位置提取、名称提取和值大小的提取
①、位置提取:
矩阵名[1,2] #返回矩阵中第1行、第2列的元素
矩阵名[1,] #返回矩阵中第1行所有元素
矩阵名[,2] #返回矩阵中第2列所有元素
矩阵名[c(1:2),] #返回矩阵第1至2行所有元素
矩阵名[,c(1:2)] #返回矩阵第1至2列所有元素
②、按名称索引:
矩阵名["行名","列名"] #返回矩阵中对应行、列的元素
(4)矩阵的编辑:
①、数据库合并:
rbind(矩阵1,矩阵2) #将矩阵1、2的行合并
rbind(矩阵,1) #给矩阵增加1行
cbind(矩阵,矩阵2) #将矩阵1、2的列合并
cbind(矩阵,1) #给矩阵增加1列
【rbind合并行,要求列数相同;cbind合并列,要求行数相同】
②、数据的删减:
矩阵[-1,] #删除矩阵第一行
矩阵[-c(1:3),] #删除矩阵第1至3行
矩阵[,-1] #删除矩阵第一列
矩阵[,-c(1:3)] #删除矩阵第1至3列
(5)矩阵的运算(要求维数相同):
①、矩阵转置:t(矩阵名)
②、各行求和:rowSums(矩阵名)
③、各行求均值:rowMeans(矩阵名)
④、各列求和:colSums(矩阵名)
⑤、各列求均值:colMeans(矩阵名)
3、数据框Data.frame(二维数据)
(1)数据框是医学研究最重要、最主要的格式,常见的医学数据导入到R语言形成的就是数据框
(2)数据框和矩阵一样都是二维数据,数据框每一列代表一个变量属性的所有取值,每一行代表一条样本数据
(3)数据框和矩阵明显不同在于:
①、数据框数据每一列都有一个名称(变量名)
②、数据框不同列,允许数据类型不同;但同一列数据类型相同
(4)创建数据库:
①、在向量基础上产生(组合多个向量):
data.frame(变量名1,变量名2,变量名3....)
数据框名 <- data.frame(向量集名1,向量集名2,向量集名3....)
#当然可以写在一起,如下:
数据框名 <- data.frame(变量名1=c(向量1,向量2....),变量名2=(向量...),变量名3=(向量....)....)
②、由矩阵产生数据框:
data.frame(矩阵名)
【转换为数据框后保留行列名,但若原矩阵列名为命名,则会默认赋一个变量名】
③、外部数据库导入
(5)数据库索引(子集提取):
①、通过行列位置提取行列:
数据框名[,1] #返回数据框的第1列
数据框名[1,] #返回数据框的第1行
数据框名[1:3,] #返回数据框的第1至3行
②、通过列名提取列:
数据框名["向量名"]
#提取数据框中向量名列,产生数据框
③、通过$提取列(最重要):
数据框名$变量名
#提取数据框中向量名列,产生向量
【通过$提取相比通过列名提取:前者形成向量,且代码简单】
④、根据变量值的大小提取行:
数据框名[数据框名$变量名1>1|数据框名$变量名2<3 , ]
#提取变量名1大于1 或 变量名2小于3的所有行
数据框名[数据框名$变量名1>1&数据框名$变量名2<3 , ]
#提取变量名1大于1 且 变量名2小于3的所有行
数据框名[数据框名$变量名==1]
#提取变量名等于1的行
【一定要在末尾写个逗号】
⑤、通过位置提取元素:
数据框名[1,1]
#返回数据框第1行(样本)第1列(变量)数据
数据框名[1]["变量名"]
#返回数据框第1行(样本)中第变量名列的数据
数据框名$变量名[1]
#返回数据框第变量名列的第1行(样本)数据
⑥、用函数subset()按条件索引:
subset(数据框名,变量名<5)
#返回数据框变量名列小于5的数据
(6)数据框的编辑:
①、增加样本数据(行):
新数据框名<-rbind(旧数据框名,list(该行在变量名1列的向量,....))
②、增加属性变量(列):
新数据框名<-cbind(旧数据框名,新变量名=c(该变量名下第1行的向量,....))
③、通过已有数据转换产生新变量(列)(重要):
数据框名$新变量名<-数据框名$变量1-数据框名$变量2
#产生新列变量,且该变量为每个样本(行)对应变量1与变量2的差值
④、删除数据:
数据框名[-1,] #删除第一行
数据框名[,-1] #删除第一列
⑤、编辑列名:
names(数据框名) #查看数据框列名
names(数据框名)[1]="新变量名"
#修改数据框内第1列列名
(7)数据框的基本运算:
①、向量长度:length(数据框名$变量名)
②、向量均数:mean(数据框名$变量名)
③、向量标准差:sd(数据框名$变量名)
④、向量总计:sum(数据框名$变量名)
⑤、向量中位数:median(数据框名$变量名)
4、列表List
(1)列表是一些对象或成分的有序集合(组合方式更自由)。列表允许整合若干对象到单个对象名下,某个列表可能是若干向量、矩阵、数据框,甚至其他列表的组合
(2)列表提供了一种简单的方式来组织和重新调用不相干的信息,同时许多R函数运行结果都是用列表形式返回的
(3)创建列表:
list(对象1,对象2,对象3....)
列表名 <- list(
整数向量集名=c(1,2,3,4),
字符向量集名=c("男","女"),
逻辑向量集名=c(TURE,FALSE) )
#创建一个含不同数据类型向量的列表
向量集名 <-c(1,2,3,4)
矩阵名<-matrix(向量集名,行数)
列表名<-list(子列表名1=向量集名,矩阵名)
#创建一个含多种结构的列表
【子列表名即列表内每个向量集或矩阵等展示后顶头的标题,如$ages=向量集名,不写则默认填充[数字]】
(4)列表索引(子集提取):
列表名[[1]]
#通过默认的[数字],索引列表的第1子列表【子列表未命名情况】
列表名[["子列表名"]]
#通过名称,索引列表的子列表【子列表已命名情况】
列表名$子列表名
#通过名称,索引列表的子列表【子列表已命名情况】
列表名[["子列表名"]][1]
#索引该子列表的第1个元素【向量集】
列表名[["子列表名"]][1,2]
#索引该子列表的第1行、第2列元素【矩阵】
列表名[["子列表名"]][1,"变量名"]
#索引该子列表的第1行样本的第变量名列的元素【数据框】
列表名[["子列表名"]]$变量名[1]
#索引该子列表的第变量名列第1个样本行的元素【数据框】
【与数据框索引操作类似,但注意用双重方括号】
(5)列表的编辑:
新列表名<-c(旧列表名,list(向量集=c(1,2,3....)))
#与向量的编辑类型,使用函数c()进行合并
【不同于其他数据结构,将列表转化为向量需要用到函数unlist()】
5、四类对象的总结:
(1)向量(vector):
一维数据集,往往具有一个向量名和一串数据,数据为同类型
(2)矩阵(matrix):
二维数据集,往往具有一个矩阵名和矩阵数据,数据为同个类型,但有行和列的属性
(3)数据框(data.frame):
二维数据集,具有行和列的属性,列由多个同等向量长度的向量集组成,每个向量称之为变量,不同变量允许不同的数据类型
(4)列表(list):
是多个对象的组合(向量、矩阵、数据框、列表),结构复杂,一般体现在统计分析结果
6、四类对象的联系:
(1)向量可以通过matrix(向量集名,行,列...)
形成矩阵
(2)矩阵可以通过as.vector()
转为向量
(3)多个向量可通过data.frame(向量集名1,向量集名2....)
形成数据框
(4)矩阵可以通过data.frame(矩阵名)
或as.data.frame(矩阵名)
转变为数据框
(5)列表可以通过unlist()
转变为向量
is 和 as 系列函数
1、is和as系列涉及不同类型数据和对象的鉴定和转换
2、is系列:
(1)is系列是判断某一个数据中的观察值是何种类型,或者数据属于何种对象与结构
(2)语法:
①、判断是否字符型:is.character()
②、判断是否数值型:is.numeric()
③、判断是否向量:is.vector()
④、判断是否矩阵:is.matrix()
⑤、判断是否数组:is.array()
⑥、判断是否数据框:is.data.frame()
⑦、判断是否因子:is.factor()
⑧、判断是否列表:is.list()
3、as系列:
(1)as系列是对数据的类型、对象进行转换
(2)语法:
①、转换为数值型:as.numeric()
②、转换为逻辑型:as.logical()
③、转换为字符串:as.charactor()
④、转换为矩阵:as.matrix()
⑤、转换为数据框:as.data.frame()
⑥、转换为因子:as.factor()
数据集的导入导出及描述
1、建立工作空间:
(1)工作空间:所有R的程序文件、数据集、其他相关资料都保存在某一个文件夹下;R语言程序结束后,下次启动自动加载历史代码
(2)语法:
①、设置工作空间:
setwd("磁盘名:/文件夹名")
②、查看工作空间:
getwd()
2、数据集导入:
(1)在Rstudio可以导入后缀是txt,csv,xls,sav等后缀名格式的文件,但不同格式所用的包不同
(2)语法:
数据集名<-read.table(file="文件名.txt",header=TRUE)
#读取文本文件,header为第一行是否读取为标题,默认为TRUE
数据集名<-read.csv(file="文件名.csv",header=TRUE,rowname=1)
#读取csv文件,rowname为是否设置横标目,默认不设置
install.packages("foreign")
library(foreign)
#导入SPSS数据集,需要先加载"haven"或"foreign"包
数据集名<-read.spss(file="文件名.spss",to.data.frame=T)
#读取SPSS文件
install.packages("readxl")
library(readxl)
#导入EXCEL数据集,需要先加载"readxl"包
数据集名<-read_excel(file="文件名.xlsx")
#读取EXCEL文件
3、数据集基本描述:
str(数据集名)
#显示变量内容结果,包括变量名、类型、值等
head(数据集名,行数)
#显示数据集对应的前几行,不填默认为前6行
class(数据集名)
#鉴别数据集是数据框、列表、矩阵?
class(数据集名$变量名)
#鉴别数据集中该变量的类型
names(数据集名)
#显示数据集的各个变量名
colnames(数据集名)
#显示所有列名(即变量名)
ncow(数据集名) ncol(数据集名)
#显示行数 #显示列数
dim(数据集名)
#显示数据集有几行几列
length(数据集名$变量名)
#显示该变量有多少个记录
summary(数据集名)
#用于数值型变量,计算每一列均数、中位数、百分位数、最大值、最小值、字符串列出计数
table(数据集名$变量名)
#对分类变量分组汇总计数,table对一列进行分组
table(数据集名$变量名1,数据集名$变量名2)
#根据变量1和变量2形成交叉表
colSums(数据集名[,c(1,2)])
#多列计算时用col,计算1、2列观察值总计
colMeans(数据集名[,c("变量名1","变量名2")])
#计算变量1、变量2的平均值
4、数据集导出:
(1)语法:
write.csv(数据框名,file="",na="NA",row.names=F,col.names=T)
#file指保存的文件名
#na指缺失值导出方式(输入什么记录为什么)
#row.name和col.name分别指是否导出行名或列名,默认导出
数据集整理
1、数据提取及删除:
(1)提取行:
#方法一:直接提取
数据集名[数据集名$变量==条件,]
#方法二:利用which提取
数据集名[which(数据集名$变量==条件),]
#方法三:利用subset提取
subset(数据集名,变量==条件)
#提取变量列满足条件的行(条件判断还可加入且&、或|)
(2)提取变量(列):
#方法一:直接提取
数据集名["变量名"]
数据集名[c("变量名1","变量名2")]
#方法二:通过列数提取
数据集名[c(8,9)]
2、变量(列)剔除:
names(数据集名)
#查看各变量所在列数
数据集名[,-2]
#删除第二列
数据集名[,-c(2,3)]
#删除第2、3列
3、数据集合并:
rbind(数据集1,数据集2)
#合并行
cbind(数据集1,数据集2))
#合并列
merge(数据集1,数据集2,by="变量名",all=T/F)
#合并两个数据集,all为F时,只合并两个数据集中该有变量名记录的行;all为T时,任意数据集有该变量的行都合并
4、变量更改:
names(数据集名)[1]<-"新变量名"
#将第一列变量名改为新变量名
数据集名$变量名 <- as.向量类型(数据集名$变量名)
#更改数据集变量名的类型
5、新增变量:
数据集名$新变量名 <- 数据集名$已有变量名
#将已有变量复制成新变量
数据集名$新变量名 <- 数据集名$已有变量名==1
#对已有变量逻辑判断,用T/F填充新变量
数据集名$新变量名 <- as.factor(数据集名$已有变量名)
#通过转化已有变量属性新增变量
数据集名$新变量名 <- 数据集名$已有变量名1*2
#通过对已有变量计算新增新变量
数据集名<-transform(数据集名,新变量名1=数据集名$已有变量名*2,新变量名2=数据集名$已有变量名*3)
#通过transform函数同时生成多个新变量
attach(数据集名)
detach(数据集名)
#通过attach和detach函数绑定或解绑数据集
6、变量转化:
数据集名$新变量名<-ifelse(数据集名$已有变量名>=5,2,1)
table(数据集名$新变量名)
#利用ifelse函数,若>5赋值为2,否则赋值为1
attach(数据集名)
数据集名$新变量名[已有变量名<=5]<-1
数据集名$新变量名[已有变量名>5]<-2
数据集名$新变量名[已有变量名>100]<-NA
levels(数据集名$新变量名)
table(数据集名$新变量名)
detach(数据集名)
#将已有变量拆成1,2,NA三个水平
数据集名$新变量名<-数据集名$已有变量名
数据集名<-within(数据集名,{
新变量名[已有变量名<=5]<-1
新变量名[已有变量名>5]<-2
新变量名[已有变量名>100]<-NA }
数据集名$新变量名<-as.factor(数据集名$新变量名)
levels(数据集名$新变量名)
table(数据集名$新变量名)
#利用within函数将已有变量拆成1,2,NA三个水平
7、数据集排序:
sort(数据集名$变量名,decreasing=T,na.last=T)
#默认将该变量列由低到高排序,decreasing为F时从高到低排序,na.last为T将缺失值放到最后
dplyr包
1、用于数据清洗和整理,提高数据处理速度
2、安装与加载:
install.package("dplyr")
library(dplyr)
3、功能:
(1)数据库合并 —— join函数:
left_join(数据集名1,数据集名2)
#依据数据集名1的样本,将两数据集所有变量合并
right_join(数据集名1,数据集名2)
#依据数据集名2的样本,将两数据集所变量合并
inner_join(t1,t2,by=c("变量名"))
#依据变量名,将两数据集共有样本取出
full_join(t1,t2, by = c("first", "last"))
#依据变量名1、2,将两数据集所有样本合并
(2)筛选 —— filter函数:
filter(数据集名,变量名1>1,变量名2<2)
filter(数据集名,变量名1>1&变量名2<2)
#筛选数据集中变量名1大于1且变量名2小于2的所有样本
filter(数据集名,变量名1>1|变量名2<2)
#筛选数据集中变量名1大于1或变量名2小于2的所有样本
filter(数据集名,分类变量名==1)
#筛选数据集中分类变量为1的所有样本
(3)排列 —— arrange函数:
arrange(数据集名,变量名)
#将数据集中所有样本,按变量名从小到大排序
arrange(数据集名,desc(变量名))
#将数据集中所有样本,按变量名从大到小排序
arrange(数据集名,变量名1,变量名2)
#将数据集中所有样本,先按变量名1从小到大排序,变量名1相同再按变量名2从小到大排序
arrange(数据集名,desc(变量名1),变量2)
#将数据集中所有样本,先按变量名1从大到小排序,变量名1相同再按变量名2从小到大排序
(4)选择 —— select函数:
select(数据集名,start_with('A'))
#将A打头的变量名筛选出来
select(数据集名,contains('A'))
#将包含A的变量名筛选出来
select(数据集名,-变量名1,-变量名2)
#剔除变量名1、变量名2后,剩下的筛选出来
select(数据集名,变量名,everything())
#将变量名放在数据集第一变量列
(5)变形 —— mutate函数:
mutate(数据集名,新变量名=旧变量名*2)
#根据旧变量计算并添加新变量
mutate(数据集名,新变量名1=旧变量名*1,新变量名2=旧变量名*2)
#根据旧变量同时计算并添加多个新变量
①、recode转换分组(多分类→2分类/3分类…):
数据集名$旧变量名<-factor(数据集名$旧变量名)
#旧变量因子化,才可用record
数据集名<-mutate(数据集名,新变量名=recode(旧变量名, "1"=1, "2"=1, "3"=2,"4"=2,"5"=2,"6"=3, "7"=3, "8"=3))
#将旧变量(8分类)转换为新变量(3分类)
数据集名$新变量名<-as.factor(数据集名$新变量名)
#将新变量因子化
②、recode更多转换:
数据集名<-mutate(数据集名,新变量名=recode(旧变量名,"1"=1,"2"=0))
#将旧变量中赋值1的重赋值为1,赋值2的重赋值为0,赋值其他的重赋值为NA(不存在)
数据集名<-mutate(数据集名,新变量名=recode(旧变量名,"1"=1,"2"=0,.default =3) )
#将旧变量中赋值1的重赋值为1,赋值2的重赋值为0,赋值为NA(不存在)的重赋值为3
(6)汇总 —— summarise函数:
summarise()函数以及衍生函数,包括summarise_all, summarise_at,summarise_if主要进行数据的统计描述
一般情况下,它们需要同时调动其它函数来共同完成:
返回最小值:min()
返回最大值:max()
返回均值:mean()
返回总和:sum()
返回标准差:sd()
返回中位数:median()
返回四分位极差:IQR()
返回观测个数:n()
返回不同的观测个数:n_distinct()
返回第一个观测:first()
返回最后一个观测:last()
返回n个观测:nth()
summarise(数据集名,新变量名1=mean(旧变量名),新变量名2= median(旧变量名))
#求旧变量的均数和中位数
summarise_at(数据集名, vars(变量名1,变量名2), funs(n(), mean, median))
#求变量1和变量2的总个数、均数和标准差
summarise_if(数据集名, is.numeric, funs(n(),mean,median))
#求类型为numeric的所有变量的均数和标准差,需要调用summarise_if 函数,var()函数,funs() 函数
summarise_if(数据集名, is.numeric, funs(n(),mean(., na.rm = TRUE), median(., na.rm = TRUE)))
#与上一个类似,只不过加入.,na.rm=TURE代表忽略缺失值
(7)拆分 —— group_by函数:
新数据集名1 <- group_by(旧数据集名,变量名)
#根据变量名进行数据库拆分。
summarise(新数据集名1,count=n())
#count = n()用来计算次数
新数据集名2<-summarise_at(新数据集名1, vars(变量名1, 变量名2), funs(n(), mean(., na.rm = TRUE)))
#根据新数据集1的分组,分别计算两组的变量1和变量2的样本数、均值(忽略缺失值)
假设检验(差异性分析)
1、正态性检验:
(1)小样本正态性检验shapiro:
shapiro.test(数据集名$变量名)
#正态性检验,适用于小样的资料
(2)大样本正态性检验Kolmogorov-Smirnov:
ks.test(数据集名$变量名,"pnorm")
#采用K-S法进行正态性检验,适用于大样本资料
(3)Lilliefor检验:
library(nortest)
lillie.test(数据集名$变量名)
#是Kolmogorov-Smirnov正态性检验修正,使用nortest包中的函数
2、方差齐性检验:
(1)两组或多组定量资料进行比较时,除了要考虑正态性外,还要考虑方差齐性,在R中可以利用var.test或car包中的bartlett.test函数完成
(2)语法:
var.test(数据集名$结局变量~数据集名$分组变量,na.rm=T)
#针对不同组的某一结局变量开展方差齐性检验
library(car)
bartlett.test(结局变量~分组变量,data=数据集名)
#方差齐性检验
3、t检验:
(1)语法:
t.test(x,y=NULL,alternative=,mu=0,paired=FALSE,var.equal=FALSE, conf.level=0.95, ...)
①、x:比较的变量,两组比较变量在前,因子在后,例:weight~sex
②、y:变量,当x为距阵时,y无效,多用于配对检验的时候应用
③、alternative:单双侧:定义 “two.sided”, “greater” or “less”
④、mu:与某个值比较,无差别假设
⑤、var.equal方差是否齐
⑥、conf.level可信区间
(2)单样本t检验:
t.test(数据集名$变量名,mu=值,alternative="less")
#单样本t检验,判断t值是否比值小
#alternative不填默认双侧
(3)成组两样本独立t检验:
t.test(结局变量~分组变量,data=数据集名,mu=0,var.equal=F)
(3)配对两样本t检验:
t.test(数据集名$变量1,数据集名$变量2,paired=TRUE)
4、方差分析:
(1)语法:
aov(formula,data= NULL, ...)
①、formula:比较变量,和t检验的参数一致:
两因素方差分析:比较变量~因子1+因子2;
交互效应分析:比较变量~因子1*因子2
(2)单因素方差分析:
数据集名$变量名<-as.factor(数据集名$变量名) #将设置成因子
新数据集名<-aov(结局变量~分类变量,data=数据集名)
#单因素方差分析
summary(新数据集名)
TukeyHSD(新数据集名)
# 两两比较的方法
(3)双因素方差分析:
新数据集名<-aov(结局变量~变量名1+变量名2,data=数据集名)
# 两因素方差分析
summary(新数据集名)
5、卡方检验:
(1)语法:
chisq.test(x, y = NULL, correct = TRUE,…)
①、x:分析变量
②、y:变量,和t检验一致
③、correct:是否较正,默认较正
(2)行列表卡方检验:
新数据集名 <- table(数据集名$分类变量名1,数据集名$分类变量名2)
#列联表两组分类变量
新数据集名2<-chisq.test(新数据集名)
#卡方检验
chisq.test(新数据集名,correct = F)
#连续较正
chisq.test(新数据集名)$expected
#提取理论频数,判断采用哪种方法
fisher.test(新数据集名)
#fisher 精确法
(3)配对卡方检验:
新数据集名<- table(数据集名$分类变量名1,数据集名$分类变量名2)
#2*2列表
mcnemar.test(新变量名)
#配对卡方检验,行列需要是2*2
6、秩和检验:
(1)语法:
wilcox.test(x, y = NULL,alternative=c("two.sided", "less", "greater"),mu = 0, paired = FALSE, exact = NULL, correct = TRUE, ...)
①、x,y:是观察数据构成的数据向量,与t检验相同
②、alternative是备择假设,有单侧检验和双侧检验
③、mu待检参数
④、paired:是否配对
⑤、exact是逻辑变量,说明是否精确计算P值
⑥、correct是逻辑变量,说明是否对P值的计算采用连续性修正,相同秩次较多时,统计量要校正
⑦、conf.int是逻辑变量,说明是否给出相应的置信区间
(2)单样本符号秩和检验:
wilcox.test(数据集名$结局变量名,mu=值,alternative="less")
#单样本t检验,是否比65小。
(3)两独立样本秩和检验:
wilcox.test(结局变量名~分组变量名,data=数据集名,mu=0)
#alternative不填默认双侧
(4)配对样本秩和检验:
wilcox.test(数据集名$变量名1,数据集名$变量名2,paired=TRUE)
#配对t检验
(5)多样本秩和检验:
kruskal.test(变量名1~变量名2,data=数据集名)
#alternative不填默认双侧
线性回归
1、准备工作:
#导入数据
elder1<-read.csv("elder1.csv")
elder2<-read.csv("elder2.csv")
#可以查看数据
str(elder1)
str(elder2)
#启动重要的R包dplyr
library(dplyr)
#现在通过dplyr的join函数把两个数据库进行合并
tt<-inner_join(elder1,elder2,by="ID")
str(tt)
#合并产生的数据库我们把它保存起来,这样下次我们可以再利用。
write.csv(tt,file ="tt.csv")
2、简单线性回归分析:
(1)线性回归分析从只有一个自变量的简单线性回归分析开始,简单回归分析:利用lm( )函数构建
(2)语法:
#绘制两者的散点图
age<-8:19
height<-c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
plot(age,height,main = "身高与年龄散点图")
#lm() 函数中 应变量height,自变量为age,它们用~连接起来。
#lm()建立回归方程
lm.reg <- lm(height~age)
#lm.reg 就是线性回归分析的一系列结果的结果名,里面东西很多。
#我们可以利用更多的函数来对lm.reg的结果进行阅读
abline(lm.reg) #画出拟合的线性回归线
anova(lm.reg) #模型方差分析
summary(lm.reg) #最重要的一张表格
3、多因素线性回归分析:
(1)多因素线性回归同样利用自带函数lm( )函数构建
(2)分析自评健康health的影响因素