【软件】R语言入门之向量
“ R语言入门开篇,向量(vector)相关知识的介绍”
R语言是一款优秀统计学编程语言,本文介绍R语言的几个重要命令,以及R语言中非常重要的一种数据结构-向量(Vector)的相关知识。
本文使用的开发工具为RGui,以">"开头的语句表示输入的命令,没有">"开头的语句是上一个语句的输出结果。
01
—
常用命令
help()
help()为帮助命令,在()中输入求助的内容并执行(按下回车键),返回网页帮助文档
> help(help)
以上命令返回如下网页文档
ls()
ls()命令显示workspace中存储的对象名称
> ls()
character(0)
> x<-1
> ls()
[1] "x"
> y<-1
> ls()
[1] "x" "y"
rm()
rm()为删除命令,在()中输入workspace中存储的对象名称并执行,将删除workspace中该对象
> ls()
[1] "x" "y"
> rm(x)
> ls()
[1] "y"
rm(list=ls())命令能够清空workspace中所有对象
> ls()
[1] "c" "e" "v" "x" "y" "z"
> rm(list=ls())
> ls()
character(0)
02
—
向量(vector)
数据对象的简单说明
R语言中包含几种基本数据类型:
数值型(numeric)
字符型(character)
逻辑型(logical)
复数型(complex)
raw型
缺失型(missing value)
将上述基本数据以一定的规则组织起来形成的数据结构:
向量(vector)
矩阵(matrix)
数组(array)
因子(factor)
列表(list)
数据帧(data frame)
向量的赋值
1)c()函数
c()函数可将()中包含的向量、数字等元素顺序连接成为一个向量
> x<-c(1,2,3,4,5)
> x
[1] 1 2 3 4 5
> y<-c(c(1,2,3),4,5)
> y
[1] 1 2 3 4 5
2)向量的赋值表达式
可使用<-或=或->或assign函数赋值,前两者用于向左赋值
> x<-c(0,0,0,0,0)
> c(1,1,1,1,1)->y
> assign("z",c(2,2,2,2,2))
> n=c(3,3,3,3,3)
> h<-c(x,y,z)
> x
[1] 0 0 0 0 0
> y
[1] 1 1 1 1 1
> z
[1] 2 2 2 2 2
> n
[1] 3 3 3 3 3
> h
[1] 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2
向量的算术运算
1)规则
向量之间进行算术运算时,向量中的每一个元素将进行相同的运算操作
> x
[1] 1 1 1 1 1
> y
[1] 1 2 3 4 5
> x+y
[1] 2 3 4 5 6
> x-y
[1] 0 -1 -2 -3 -4
> x+2*y
[1] 3 5 7 9 11
当两个向量的长度不相同时,较短的向量以自身元素循环的形式进行补充,直至与较长的向量中元素个数一致。
> x
[1] 1 -1
> y
[1] 0 0 0 0 0 0 0 0
> x+y
[1] 1 -1 1 -1 1 -1 1 -1
2)算术运算符
+ 加
- 减
* 乘
/ 除
^ 乘方
3)函数
sin() 求正弦值
cos() 求余弦值
tan() 求正切值
log() 求底数为10的对数值
exp() 求底数为e的指数
sqrt() 求平方根
sqrt(-2) 返回NaN
sqrt(-2+0i) 返回复数
> c<-sqrt(-2)
Warning message:
In sqrt(-2) : NaNs produced
> c
[1] NaN
> x<-sqrt(-2+0i)
> x
[1] 0+1.414214i
max() 求最大值
min() 求最小值
median() 求中位数
range() 求最大值和最小值,相当于c(min(),max())
length() 求向量中元素个数
sum() 求向量中所有元素之和
prod() 求向量中所有元素之积
mean() 求样本均值
var() 求样本方差,var(x)等价于sum((x-mean(x))^2)/(length(x)-1)
sd() 求样本标准差
quantile() 求百分位数
cov(x, y) 求向量x和y的协方差
cor(x,y) 求向量x和y的相关系数
sort() 返回递增排序后的向量
规则序列的生成
1)":"运算符
生成间隔为1的递增或递减数列
> x<-c(1:10)
> x
[1] 1 2 3 4 5 6 7 8 9 10
> y<-c(10:1)
> y
[1] 10 9 8 7 6 5 4 3 2 1
2)seq()函数
seq()函数生成规则序列
seq(from=1, to=1, by=(to-from)/(length.out-1), length.out=NULL, along.with=NULL, ...)
---by 表示步长或间隔
> seq(1,10)
[1] 1 2 3 4 5 6 7 8 9 10
> seq(from=1,to=10,by=2)
[1] 1 3 5 7 9
3)rep()函数
rep()函数生成重复序列,设置参数times或each可实现不同的重复形式
> rep(1,5)
[1] 1 1 1 1 1
> rep(c(1,2,3),times=2)
[1] 1 2 3 1 2 3
> rep(c(1,2,3),each=2)
[1] 1 1 2 2 3 3
逻辑向量
与上述介绍的数值型向量类似,R语言可以定义逻辑向量。逻辑向量的元素可以是TRUE、FALSE、NA(无效值)
1)赋值
> l<-c(TRUE,FALSE,NA,NA,FALSE)
> l
[1] TRUE FALSE NA NA FALSE
条件表达式可生成逻辑向量
> x<-c(1:10)
> x_bigger_than_5<-x>5
> x
[1] 1 2 3 4 5 6 7 8 9 10
> x_bigger_than_5
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
2)条件运算符
> 大于
< 小于
== 等于
>= 大于等于
<= 小于等于
!= 不等于
& 且
| 或
!非
> x1
[1] 0 1
> !x1
[1] TRUE FALSE
> x1
[1] 0 1
> x2
[1] 1 0
> x1&x2
[1] FALSE FALSE
> x1|x2
[1] TRUE TRUE
缺失值
当元素是无效值或缺失值的时候,元素被赋予NA值(not avaliable的缩写)。一般情况下,作用于NA值的操作将得到NA值。
> x
[1] 1 2 3 NA
> x+1
[1] 2 3 4 NA
is.na(x)函数逐个判断向量x中的元素是否为NA值
> x<-c(1,2,3,NA,5,NA)
> is.na(x)
[1] FALSE FALSE FALSE TRUE FALSE TRUE
R语言中还有第二类缺失值,即NaN(Not a Numbe的缩写)。is.na()函数能够不加区别地识别NA值和NaN值,is.nan()函数仅识别NaN值。
> x<-c(1,2,NaN,NA,3)
> x
[1] 1 2 NaN NA 3
> is.na(x)
[1] FALSE FALSE TRUE TRUE FALSE
> is.nan(x)
[1] FALSE FALSE TRUE FALSE FALSE
字符向量
字符型数据即包含在单引号或双引号中的一串字符
1)赋值
> x<-c("x","y","How","Jun","R")
> x
[1] "x" "y" "How" "Jun" "R"
2)转义字符
在字符型数据中,\称为转义字符,使用?Quotes命令可查看所有转义字符。
3)paste()函数
paste()函数能够逐个连接两个或多个字符向量中每一个元素
paste(..., sep="", collapse = NULL)
---... 一个或多个R对象,被转换为字符串
---sep 分隔符
> c<-paste(1:5,"kg",sep="")
> c
[1] "1kg" "2kg" "3kg" "4kg" "5kg"
> x<-paste("Jun",1:5,sep="-")
> x
[1] "Jun-1" "Jun-2" "Jun-3" "Jun-4" "Jun-5"
> x<-paste(2020,"6",1:5,sep="-")
> x
[1] "2020-6-1" "2020-6-2" "2020-6-3" "2020-6-4" "2020-6-5"
索引向量
向量名后加中括号,并在中括号中填入索引向量,可获得原向量的子集。
创建向量子集的表达式:vector[index_vector]
索引向量分为如下四种类型:
1)逻辑索引向量
逻辑索引向量使用逻辑值TRUE和FALSE进行索引,遇到TRUE值时取出作为子集的元素。当逻辑索引向量和原向量长度不一时,索引向量或循环补充或截断。
> x<-c(1:5)
> x
[1] 1 2 3 4 5
> x[x>2]
[1] 3 4 5
> index_x<-c(TRUE,FALSE)
> x[index_x]
[1] 1 3 5
> (x+2)[x>2&x<5]
[1] 5 6
2)正整数索引向量
正整数索引向量表示创建子集时取出该位置上的元素,正整数索引向量中元素的取值范围是{1,2,3,4,length(x)},R语言中第一个元素的位置为1。
> x<-c(1:10)
> x
[1] 1 2 3 4 5 6 7 8 9 10
> x[5]
[1] 5
> x[4:8]
[1] 4 5 6 7 8
> x[rep(c(3,5),times=3)]
[1] 3 5 3 5 3 5
3)负整数索引向量
负整数索引向量中表示排除该元素的意思,即在创建子集时不选择负整数的绝对值位置上的元素。
> x
[1] 1 2 3 4 5 6 7 8 9 10
> x[-5]
[1] 1 2 3 4 6 7 8 9 10
> x[-(2:6)]
[1] 1 7 8 9 10
4)字符索引向量
当向量中的元素具有名称时,可使用名称进行索引。names()函数可以为向量中的元素添加名称,名称与数字索引相比更容易记忆。
x<-c(1:3)
"apple","cat","fish") names(x)<-c(
"fish"] x[
fish
3
x
apple cat fish
1 2 3
索引赋值操作:
> x<-c(-5:5)
> x
[1] -5 -4 -3 -2 -1 0 1 2 3 4 5
> x[x<0]<--x[x<0]
> x
[1] 5 4 3 2 1 0 1 2 3 4 5
03
—
描述性统计实践
使用某班级的身高数据作为练习的数据集,对数据集进行描述性统计。
1)输入数据:
> s<-c(176,170,173,179,170,163,168,167,178,173,172,169,178,182,165,172,174,170,166,167,172,164,172,163,176,163,170,174,174,173,169,165,170,172,172,159,163,155,154,156,158,161,162,165,162,163,158,160,161,162,159,156,156,162,156,157,166,155,156,158,157,162,162,155,157,156,157,157)
> s
[176 170 173 179 170 163 168 167 178 173 172 169 178 182 165 172 174 170 166 ]
[167 172 164 172 163 176 163 170 174 174 173 169 165 170 172 172 159 163 155 ]
[154 156 158 161 162 165 162 163 158 160 161 162 159 156 156 162 156 157 166 ]
[155 156 158 157 162 162 155 157 156 157 157 ]
2)数值描述性度量
计算数据集的样本容量、平均值、极差、样本方差、样本标准差、最小值、下四分位数、中位数、上四分位数、最大值
mean_s<-mean(s)
var_s<-var(s)
sd_s<-sd(s)
len_s<-length(s)
min_s<-min(s)
Q1<-quantile(s,0.25)
median_s<-median(s)
Q3<-quantile(s,0.75)
max_s<-max(s)
range_s<-max_s-min_s
result_s<-c(len_s,mean_s,range_s,var_s,sd_s,min_s,Q1,median_s,Q3,max_s)
"len","mean","range","var","sd","min","Q1","median","Q3","max") names(result_s)<-c(
result_s
len mean range var sd min Q1
68.000000 165.058824 28.000000 52.951712 7.276793 154.000000 158.000000
median Q3 max
163.500000 172.000000 182.000000
summary()函数能够一次性计算出最小值、下四分位数、中位数、样本均值、上四分位数、最大值;
fivenum()函数能够一次性计算出最小值、下四分位数、中位数、上四分位数、最大值。
> summary(s)
Min. 1st Qu. Median Mean 3rd Qu. Max.
154.0 158.0 163.5 165.1 172.0 182.0
> fivenum(s)
[1] 154.0 158.0 163.5 172.0 182.0
3)直方图和箱线图
"",col="pink",xlab="height (cm)",breaks=8) hist(s,main=
boxplot(s,col="pink")
4)判断异常值
z得分判据:abs(z)>3
s[abs((s-mean_s)/sd_s)>3]
numeric(0)
盒子图判据:>Q3+3*(Q3-Q1) or <Q1-3*(Q3-Q1)
s[(s>Q3+3*(Q3-Q1))|(s<Q1-3*(Q3-Q1))]
numeric(0)
5)判断数据的正态性
判据1:四分位间距与标准差之比IQR/s≈1.3时,数据近似正态
(Q3-Q1)/sd_s
75%
1.923925
判据2:正态概率图
qqnorm(s)
qqline(s,col=2,lwd=2)