R语言统计入门-第一章

1.1 初始步骤

1
2
3
library(ISwR)
#随机抽取1000个符合正态分布的随机数
plot(rnorm(1000))

1.1.3 向量运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#构建向量
weight <- c(60,72,57,90,95,72)
weight
height <- c(1.75,1.80,1.65,1.90,1.74,1.91)
#计算BMI
bmi <- weight/height^2
bmi
#计算均值
xbar <- sum(weight)/length(weight)
#计算偏差及其平方及偏差平方和
weight - xbar
(weight - xbar)^2
sum((weight - xbar)^2)
#标准差
sqrt(sum((weight - xbar)^2)/(length(weight)-1))
#其实已经有函数
mean(weight)
sd(weight)

1.1.4 标准过程

1
2
#单样本t检验,参数mu代表希腊字母μ,表示理论均值,若没有给定,则默认mu=0
t.test(bmi, mu=22.5)

1.1.5 作图

1
2
3
4
5
6
7
#若研究体重与身高的关系,第一想法就是作图
plot(height, weight)
#用pch参数修改绘图符号,pch=2为三角形
plot(height, weight,pch=2)
#在图中叠加一个基于BMI为22.5的体重估计曲线
hh <- c(1.65,1.70,1.75,1.80,1.85,1.90)
lines(hh, 22.5*hh^2)

1.2 R语言基础

1.2.3 向量

1
2
3
4
#字符向量
c("Huey","Dewey","Louie")
#单引号或双引号都可以
c('Huey','Dewey','louie')

1.2.4 引用和转义序列

1
2
3
4
#输出一个不带引号的字符串,用cat函数
cat(c("Huey","Dewey","Louie"))
#反斜杠\被称为转移字符。可用\"方式插入引用字符
cat("What is \"R\" ?\n")

1.2.6 生成向量的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#c()函数,含义是把各分项首尾连接
c(42,57,12,39,1,3,4)
#也可以用于连接多于一个元素的向量
x <- c(1,2,3)
y <- c(10,20)
c(x, y, 5)
#也可以给某些元素明明
x <- c(red="Huey",blue="Dewey",green="Louie")
#seq()函数,用于建立数字等差序列
seq(4,9)
#若间距为2
seq(4,10,2)
#rep()函数,用来产生重复值
#使用时有两个参数,依赖于第二个参数是想量还是数字,产生的结果也不一样
opps <- c(7,9,13)
rep(opps,3)
rep(opps,1:3)

1.2.7 矩阵和数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#用dim()函数设置或改变x的维度
#将一个12个数字的向量改为3*4矩阵
#值得注意的是。矩阵的存储是以列为主,即第二列元素跟在第一列元素后面
x <- 1:12
dim(x) <- c(3,4)
#还可用matrix()函数创建矩阵,byrow=T是将矩阵改成以按行而不是按列形式填充
matrix(1:12, nrow = 3, byrow = T)
#给行命名
#LETTERS[]特征向量是一个包含大写字母A-Z的内置变量
rownames(x) <- LETTERS[1:3]
x
#给列命名
colnames(x) <- LETTERS[4:7]
x
#将x转置
t(x)
#可以按行或按列分别采用cbind和rbind函数将向量粘在一起
cbind(A=1:4,B=5:8,C=9:12)
rbind(A=1:4,B=5:8,C=9:12)

1.2.8 因子

1
2
3
4
5
6
7
8
9
10
#创建数值向量pain,对五个病人的疼痛水平编码
pain <- c(0,3,2,2,1)
#希望把它作为一个分类变量处理
#利用函数factor创建一个因子fpain
#这个函数除了调用pain之外,还有参数levels=0:3,意味着输入的编码使用了3个值0~3
#这个参数可以省略,R默认使用pain中合理排序的值
fpain <- factor(pain,levels = 0:3)
#将水平名称转换为特定的4个字符串
levels(fpain) <- c("none","mild","medium","severe")
fpain

1.2.9 列表

1
2
3
4
5
6
7
8
#创建11个妇女月经前后能量摄入的向量
intake.pre <- c(5260,5470,5640,6180,6390,6515,6805,7515,7515,8230,8770)
intake.post <- c(3910,4220,3885,5160,5645,4680,5265,5975,6790,6900,7335)
#把单独向量组合成一个列表
mylist <- list(before= intake.pre,after=intake.post)
mylist
#列表各部分通过list中使用的参数名称来命名
mylist$before

1.2.10 数据框

1
2
3
4
5
#创建数据框,注意数据是成对的
d <- data.frame(intake.pre,intake.post)
d
#也可以通过$符号获得
d$intake.pre

1.2.11 索引

1
2
3
4
5
6
7
8
9
#如果需要向量的摸一个具体元素,可以这样
#这个方括号就是索引
intake.pre[5]
#也可创建一个包含多于一个数据的子向量
intake.pre[c(3,5,7)]
#注意里面的c(3,5,7)是必要的。像下面的就不一样了
#intake.pre[3,5,7]
#负索引,即引用除了某些位置之外的所有元素
intake.pre[-c(3,5,7)]

1.2.12 条件选择

1
2
3
4
#可以通过一个关系表达式选择一些满足某种标准的数据
intake.post[intake.pre > 7000]
#寻找经前摄入7000-8000 kj的妇女,停经后的能量摄入
intake.post[intake.pre > 7000 & intake.pre <8000]

1.2.13 数据框的索引

1
2
3
4
5
6
7
8
9
10
11
d <- data.frame(intake.pre,intake.post)
#寻找第5行。第1列的数据
d[5,1]
#寻找第5位妇女的所有数据,注意里面的逗号是必要的,若没有则表示d的第二列构成的数据框
d[5,]
#查找停经前能量摄入超过70000 kj的妇女
d[d$intake.pre > 7000,]
#查看d中前几个数据
d[1:2,]
#函数head()默认显示前六行
head(d)

1.2.14 分组数据和数据框

1
2
3
4
5
6
7
8
9
10
#R内置数据集energy,消瘦和肥胖妇女的能量消耗
energy
#有时候希望每一组有一个独立的向量来存储数据
exp.lean <- energy$expend[energy$stature == "lean"]
exp.lean
exp.obese <- energy$expend[energy$stature == "obese"]
exp.obese
#也可以通过split函数,它根据分组生成一系列向量
l <- split(energy$expend, energy$stature)
l

1.2.15 隐式循环

1
2
3
4
5
6
7
8
9
10
#计算数值向量组成的数据框中每个变量的均值
#lapply函数返回一个列表
lapply(thuesen, mean, na.rm =T)
#sapply函数尽可能将结果简化成矢量或矩阵
sapply(thuesen, mean, na.rm =T)
#apply函数。可以针对矩阵的行或列(或广义下多维数组的下标)
#对于矩阵而言,apply函数中的参数2,表示按列,若为1,则表示按行,若为c(1,2)则表示行和列
#下面表示按列取最小值
m <- matrix(rnorm(12),4)
apply(m, 2, min)

1.2.16 排序

1
2
3
#使用sort()函数
intake$post
sort(intake$post)
坚持原创,长期缺钱