安装
R语言开源,安装很简单,此处带过。
界面
R语言的使用简介
赋值命令
赋值符号为 <- 或 = ,但是建议使用<-
x <- 10 #赋值10给变量x
R语言的数据类型
R是一种基于对象(object)的语言,在R中看到的一切事物都是对象。
对象有4种基本类型:
- 数值型(numeric) 30;3.14
- 字符型(character) “dog”
- 逻辑型(logical) True/False 或 T/F
- 复数型(complex) 1+2i
查看对象的数据类型:class()
> x
[1] 10
> class(x) #查看对象数据类型
[1] "numeric" #数值型
> y <- 5
> x+y
[1] 15
> x*y
[1] 50
> a <- "cat;dog;pig" #将字符赋值给对象,需要加上引号
> a
[1] "cat;dog;pig"
> strsplit(a,";") #将字符型变量a,按照“;”分割
[[1]]
[1] "cat" "dog" "pig"
> TRUE #逻辑判断
[1] TRUE
> T
[1] TRUE
> FALSE
[1] FALSE
> F
[1] FALSE
>
> T&F #“和”
[1] FALSE
> T|F #“或”
[1] TRUE
> !T #“非”
[1] FALSE
R语言的数据结构
向量 (vector)
一维数据,类似于数学上集合的概念,由1个或多个元素构成,可以存储数值型、字符型、逻辑型数据。
用函数c创建向量;
c代表concatenate(连接),也可以理解为combine(合并)。
> a <- c(1,2,3,4)
> a
[1] 1 2 3 4
> 1:4 #连续性数值型对象的赋值
[1] 1 2 3 4
> b <- c("apple","banana","peach") #向量的对象也可是字符串
> b
[1] "apple" "banana" "peach"
> c <- c(TRUE,FALSE,TRUE) #向量的对象还可以是逻辑型
> c
[1] TRUE FALSE TRUE # 一个向量中的元素必须是同一种数据类型
> x <- 1:50
> x
[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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
[50] 50
> x[5] #x的第5个元素
[1] 5
> x[c(2,4)] #借助向量一次提取多个元素
[1] 2 4
> x>5 #对x中的元素进行判断
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[25] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[49] TRUE TRUE
> x[x>5] #加上判断条件筛选x中的对象
[1] 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
> x[5] <- 90 #修改x中的元素
> x
[1] 1 2 3 4 90 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] 50
矩阵 (matrix)
矩阵是二维数据(有行和列)
在R中,矩阵是有维数的向量,矩阵元素数据类型需要一致,可以是数值型,字符型和逻辑性。
用matrix函数创建矩阵:
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
> x <- 1:20 #赋值
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> m <- matrix(x,nrow=4,ncol=5) #用x创建矩阵
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> m1 <- matrix(x ,nrow=4) #只需要指定行或列中的一个,就可以计算出另一个
> m1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
-----------------------------
> m2 <- matrix(x ,nrow=4 ,ncol=5 ,byrow=T) #使用行顺序排列(默认是列)
> m2
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
-----------------------------
> m[1 ,2] #查看第一行第二列的元素
[1] 5
> m[1 ,c(2 ,3)] #查看第一行,第二和第三列的元素
[1] 5 9
> m[2,] #查看第二行的所有元素
[1] 2 6 10 14 18
> m[,2] #查看第二列的所有元素
[1] 5 6 7 8
----------------------------
> m[2,2] <- 20 #修改第二行第二列的元素为20
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 20 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> m[,2] <- 20 #将第二列元素全部修改为20
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 20 9 13 17
[2,] 2 20 10 14 18
[3,] 3 20 11 15 19
[4,] 4 20 12 16 20
> m[m>30] <- 30 #将例表中大于30的元素都修改为30
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 20 9 13 17
[2,] 2 20 10 14 18
[3,] 3 20 11 15 19
[4,] 4 20 12 16 20
-----------------------------
> m + 1
[,1] [,2] [,3] [,4] [,5]
[1,] 2 21 10 14 18
[2,] 3 21 11 15 19
[3,] 4 21 12 16 20
[4,] 5 21 13 17 21
> m+m
[,1] [,2] [,3] [,4] [,5]
[1,] 2 40 18 26 34
[2,] 4 40 20 28 36
[3,] 6 40 22 30 38
[4,] 8 40 24 32 40
-----------------------------
> z <- array(1:9,c(2,3,4)) #创建数组
> z
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 2
[2,] 8 1 3
, , 3
[,1] [,2] [,3]
[1,] 4 6 8
[2,] 5 7 9
, , 4
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
列表 (list)
列表包括不同类型的元素和对象,是他们的有序集合。
和向量类似,都是一维的数据集合。
向量是能够存储一种数据类型,而列表可以储存若干向量、矩阵、数据框,甚至其他列表和组合。
> a <- 1:20
> b <- c("pig" ,"cattle" ,"sheep")
> c <- matrix(1:10 ,nrow=2)
> mlist <- list(a,b,c) #创建列表
> mlist
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[[2]]
[1] "pig" "cattle" "sheep"
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
-----------------------------
> names(mlist) #查看每个列表元素的名字
NULL
> names(mlist) <- c("one" ,"two" ,"three") #为列表中的每个元素进行命名
> names(mlist)
[1] "one" "two" "three"
------------------------------
> mlist[1] #查看列表第一个元素
$one
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> mlist[2]
$two
[1] "pig" "cattle" "sheep"
> mlist[3]
$three
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> mlist[c(2,3)]
$two
[1] "pig" "cattle" "sheep"
$three
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
-----------------------------
> mlist["one"] #查看列表中名为“one”的元素
$one
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> mlist$one
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-----------------------------
> mlist[1] #列表用一对方括号表示列表中的元素,本质上数据类型还是列表
$one
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> mlist[[1]] #列表用两对方括号,表示元素本身,已经不是列表了
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
>
数据框 (dataframe)
数据框是矩形结构,包含行和列。
数据框实际上是一个列表。列表中的元素是向量,这些向量构成数据框的列,每一列必须具有相同的长度,而且列必须命名。
> df1 <- data.frame(site=c("a","b","c","d") ,season=c("Winter" ,"Summer" ,"Spring" ,"Fall") ,pH=c(7.4 ,6.3 ,8.6 ,7.2 )) #创建数据框
> df1
site season pH
1 a Winter 7.4
2 b Summer 6.3
3 c Spring 8.6
4 d Fall 7.2
> colnames(df1) #查看数据框列名
[1] "site" "season" "pH"
> colnames(df1)[1] <- "city" #修改数据框列名返回的第一个元素的值
> df1
city season pH
1 a Winter 7.4
2 b Summer 6.3
3 c Spring 8.6
4 d Fall 7.2
> df1[,1] #查看数据框第一列
[1] "a" "b" "c" "d"
> df1$city #按名称索引
[1] "a" "b" "c" "d"
R基本统计量的计算
> x <- c(4.5 ,4.5 ,5.0 ,5.0 ,5.5 ,5.5 ,5.5 ,6.0 ,6.0 ,6.5 ,17.0 )
> # 样本含量(向量的长度)
> n <- length(x)
> n
[1] 11
> # 算术平均数
> mean <- mean(x)
> mean
[1] 6.454545
> # 方差
> var <- var(x)
> var
[1] 12.62273
> # 标准差
> std.dev <- sd(x)
> std.dev
[1] 3.552848
> # 标准误
> std.mean <- std.dev/sqrt(n)
> std.mean
[1] 1.071224
> # 中位数
> median <- median(x)
> median
[1] 5.5
> # 变异系数
> c.v <- 100*std.dev/mean
> # 变异系数
> c.v
[1] 55.04412
> # 极差
> range <- max(x) - min(x)
> range
[1] 12.5
> # 上四分位数
> upper.quartile <- quantile(x ,3/4)
> upper.quartile
75%
6
> # 下四分位数
> lower.quartile <- quantile(x ,1/4)
> lower.quartile
25%
5
> # summary函数计算所分析数据的最小值、下四分位数、中位数、算术平均数、上四分位数和最大值
> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
4.500 5.000 5.500 6.455 6.000 17.000
R进行异常值检验
> # 四分位数检验
> x <- c(4.5 ,4.5 ,5 ,5 ,5.5 ,5.5 ,5.5 ,6 ,6 ,6.5 ,17)
> upper.quartile <- quantile(x ,3/4)
> lower.quartile <- quantile(x ,1/4)
> IQR <- upper.quartile - lower.quartile
> upper.outlier <- upper.quartile + 1.5*IQR
> lower.outlier <- lower.quartile - 1.5*IQR
> outlier1 <- which(x>upper.outlier)
> outlier2 <- which(x<lower.outlier)
> outlier1
[1] 11
> outlier2
integer(0)
> # Grubbs检验
> install.packages("outliers")
试开URL’https://mirrors.tongji.edu.cn/CRAN/bin/windows/contrib/4.0/outliers_0.14.zip'
Content type 'application/zip' length 84347 bytes (82 KB)
downloaded 82 KB
package ‘outliers’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\ALIENWARE\AppData\Local\Temp\Rtmpc1zNV4\downloaded_packages
> library(outliers)
> x <- c(4.5 ,4.5 ,5.0 ,5.0 ,5.5 ,5.5 ,5.5 ,6.0 ,6.0 ,6.5 ,17.0 )
>
> # 默认检测最大值是否是异常值,opposite = FALSE
> grubbs.test(x)
Grubbs test for one outlier
data: x
G = 2.968170, U = 0.030897, p-value = 2.308e-07
alternative hypothesis: highest value 17 is an outlier
> # 如果要检测最小值是否是异常值,加上参数opposite = TRUE
> grubbs.test(x ,opposite=TRUE)
Grubbs test for one outlier
data: x
G = 0.55013, U = 0.96671, p-value = 1
alternative hypothesis: lowest value 4.5 is an outlier
计算常用概率分布函数
> # d是density的缩写,表示密度函数
> # 计算标准正态分布x=0对应的值
> dnorm(0 ,mean=0 ,sd=1)
[1] 0.3989423
> # p是quantile的缩写,表示概率累积分布函数
> pnorm(0 ,mean=0 ,sd=1)
[1] 0.5
> # 计算标准正态分布从负无穷大到x的概率是0.9678,可以通过qnorm函数计算x的值
> qnorm(0.9678 ,mean=0 ,sd=1)
[1] 1.849401
> # r是radnom的缩写,表示随机函数
> # 生成符合正态分布均值为0,标准差为1的50个随机数
> rnorm(50 ,mean=0 ,sd=1)
[1] -1.41251372 -1.34009133 -0.14781196 -1.64708709 0.54913575 -0.84581084 -0.41846515 -1.34067616 1.18717192 0.50290476 -0.73542229 1.63871703
[13] 1.17335942 -0.04842197 1.26847077 0.78414830 1.88596786 0.27968617 -1.77085920 -2.23270768 0.63299473 -0.24814760 1.12919002 0.71834834
[25] -0.81522536 -0.98187995 2.30751933 1.31887837 -0.47294173 0.46840903 -0.64846364 -0.23225712 0.87104441 2.52291946 -0.56971207 0.79112635
[37] -0.63984660 -1.57807542 0.96905441 1.76338953 1.20198607 -0.47571799 1.95709805 0.65497510 1.27188857 -0.11770212 1.52434198 1.20559993
[49] -0.83175382 -0.52164392