授课教师: 浙江中医药大学-郑卫军
微信公众号: 郑老师统计课程、医学论文与统计分析


安装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的影响因素