《统计建模与R软件》薛毅

第2章 R软件的使用

2.2 数字、字符与向量

总结:产生等差数列可用(:)生成;seq(from=value1, to=value2, by=value3)产生等间隔函数;rep(x, times=3)产生重复函数;记住逻辑运算符(<, <=, >, >=, ==, !=)及符合逻辑运算的逻辑表达式(&, |, !与或非),逻辑全为真all,逻辑存在真any;NA表示缺失数据,判断数据类型的四个函数(is.na, is.nan, is.finite, is.infinite,是否是缺失,是否是非缺失,是否有限,是否无穷);字符型向量可用paste()函数对字符进行连接,sep参数表示字符连接符,collapse表示向量连接符;通过向量下标可以取向量的一个或多个分量,或向量分量的重新赋值,但要记住R的向量下标从1开始,可通过逻辑向量的TRUE与FALSE取到原向量的结果,符合判断条件即为TRUE时取出;下标的正整数运算则取向量的相应分量;负整数运算扣除相应分量,留下其余分量;字符型值的下标向量可通过元素名称取得。

2.2.2 产生有规律的序列

1. 等差数列

a:b表示从a开始,逐项加1(或减1),知道b为止,如x<- 1:30表示向量x=(1, 2, …, 30),x<- 30:1表示向量x=(30, 39, …, 1)。当a为实数,b为整数时,向量a:b时实数,其间隔差1,而当a为整数,b为实数时,a:b表示其间隔差1的整数向量。如:
> 2.312:6
[1] 2.312 3.312 4.312 5.312
> 4:7.6
[1] 4 5 6 7
注意:x<- 2*1:15并不是表示2到15,而是表示向量x=(2, 4, …, 30),即x<- 2*(1:15),也就是等差运算优于乘法运算。同理,1:n-1并不是表示1到n-1,而是表示向量1:n的各个分量分别减去1。若需要表示1到n-1,则需要对n-1加括号,等差运算优于加减法运算。例如:(这里提到计算的优先级)
> n <- 5
> 1:n-1#各个分量都减去1
[1] 0 1 2 3 4
> 1:(n-1)#表示1:4
[1] 1 2 3 4

2. 等间隔函数

seq()函数能够产生等距间隔的数列,其基本形式为:
seq(from=value1, to=value2, by=value3)
即从value1开始,到value3结束,中间的间隔为value3。例如:
> s1 <- seq(-5, 5, by=.2)
> s1
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0
[12] -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8
[23] -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4
[34] 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6
[45] 3.8 4.0 4.2 4.4 4.6 4.8 5.0
表示从-5到5间距为0.2
seq函数的另外一种表示形式为:
seq(length=value2, from=value1, by=value3)
即从value1开始,间隔为value3,其向量的长度为value2。例如:
> s2 <- seq(length=51, from=-5, by=.2)
> s2
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0
[12] -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8
[23] -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4
[34] 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6
[45] 3.8 4.0 4.2 4.4 4.6 4.8 5.0

3. 重复函数

rep()是重复函数,它可以将某一向量重复若干次再放入新的变量中,例如:
> x<- 1:30
> s <- rep(x, times=3)
> s
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6
[37] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[55] 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12
[73] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
即将变量x重复3倍,放在变量s中,如:
> x <- c(1, 4, 6.25); x
[1] 1.00 4.00 6.25
> s <- rep(x, times=3); s
[1] 1.00 4.00 6.25 1.00 4.00 6.25 1.00 4.00 6.25

2.2.3 逻辑向量

当逻辑运算为真时,返回值为TRUE;当逻辑运算为假时,返回值为FALSE。例如:
> x <- 1:7
> l <- x>3
> l
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
逻辑运算符:
<小于, <=小于等于, >大于, >=大于等于, ==等于, !=不等于。
如果c1和c2是两个逻辑表达式:
c1 & c2(c1与c2), c1 | c2(c1或c2), !c1(非c1)
逻辑变量可进行赋值
> z <- c(TRUE, FALSE, T, F)
> z
[1] TRUE FALSE TRUE FALSE
其中T是TRUE的简写,F是FALSE的简写
判断一个逻辑向量是否都为真值的函数是all,判断是否其中有真值的函数是any,例如:
> c(1,2,3,4,5,6) > 3
[1] FALSE FALSE FALSE TRUE TRUE TRUE
> all( c(1,2,3,4,5,6) > 3 )
[1] FALSE
> any( c(1,2,3,4,5,6) > 3 )
[1] TRUE

2.2.4 缺失数据

用NA表示某处的数据缺失,例如:
> z <- c(1:3, NA); z
[1] 1 2 3 NA
函数is.na()是检测缺失数据的函数,返回TRUE此数据是缺失数据,返回FALSE则不是缺失数据;例如:
> ind <- is.na(z); ind
[1] FALSE FALSE FALSE TRUE
如果将缺失数据改为0,则利用如下方法:
> z[is.na(z)] <- 0; z
[1] 1 2 3 0
> z[!is.na(z)]; z#取出z内非缺失值
类似的函数有:
is.nan() 检测数据是否不确定,TRUE为不确定,FALSE为确定
is.finite() 检测数据是否有限,TRUE为有限,FALSE为无穷
is.infinite() 检测数据是否无穷,TRUE为无穷,FALSE为有限
> x<-c(0/1, 0/0, 1/0, NA);x
[1] 0 NaN Inf NA
> is.nan(x)
[1] FALSE TRUE FALSE FALSE
> is.finite(x)
[1] TRUE FALSE FALSE FALSE
> is.infinite(x)
[1] FALSE FALSE TRUE FALSE
> is.na(x)
[1] FALSE TRUE FALSE TRUE
不确定数据是缺失数据,但缺失数据是确定的

2.2.5 字符型向量

向量的元素可以取字符串值,例如:
> y <- c("er","sdf","eir",'jk','dim')
> y
[1] "er" "sdf" "eir" "jk" "dim"
单引号和双引号作用相同
paste函数将自变量连接成一个字符串,默认用空格分开
> paste('my','job')
[1] "my job"
但paste()函数,也可将两个向量连接,连接方式是,第一个向量的分量和第二个向量的分量连接,
> x <- c('ss','jes')
> y <- c("er","sdf","eir","jk",'dim')
> paste(x, y)
[1] "ss er" "jes sdf" "ss eir" "jes jk" "ss dim"
> w <- c('a','b')
> paste(x, y, w)
[1] "ss er a" "jes sdf b" "ss eir a" "jes jk b" "ss dim a"
连接的自变量可以是向量,这时各对应元素连接起来,长度不相同时较短的向量被重复使用,自变量可以是数值向量,连接时自动转换成适当的字符串表示,paste函数的sep参数表示设定连接的分隔符,而sep=’'表示不用分隔符,两个字符直接连接,例如:
> labs <- paste('X', 1:6, sep=''); labs#表示字符X重复6次并且和等差数列的数值分别连接
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> labs <- paste('X', 1:6); labs
[1] "X 1" "X 2" "X 3" "X 4" "X 5" "X 6"
> paste(c('c','a'),1:6,sep='')#这里实际上表示的是两个向量的连接,向量c(‘c’,‘a’)和向量1:6短的向量向长的向量补齐。
[1] "c1" "a2" "c3" "a4" "c5" "a6"
> paste(c('a','b'), collapse='.')#collapse表示输出的a,b用“.”进行连接
[1] "a.b"
y <- c('ab','cde','fg','h','igk','lmno')
paste(y,collapse='.')#如果用向量的连接就需要用collapse这个参数,如果用sep无法实现向量内字符的连接
[1] "ab.cde.fg.h.igk.lmno"
paste(y,sep='.')#无法实现向量内字符的连接
[1] "ab" "cde" "fg" "h" "igk" "lmno"
可以用gsub函数进行字符的替换,gsub(“旧字符”, “新字符”, 向量)
> set
[1] "85.75%" "93.75%" "86.04%" "88.65%" "88.57%"
> gsub("%", "", set)
[1] "85.75" "93.75" "86.04" "88.65" "88.57"

2.2.6 复数向量

函数complex()

2.2.7 向量下标运算 R语言中向量的下标是从1开始的

向量中的某一个元素可用x[i]的格式进行访问,其中x是一个向量名,或一个取向量值的表达式,例如:
> x <- c(1,4,7)
> x[2]
[1] 4
> (c(1,3,5)+5)[2]
[1] 8
同时通过向量的下标,也可以单独的改变一个向量当中某个分量的值
> x[2] <- 125
> x
[1] 1 125 7
> x[c(1,3)]
[1] 1 7
> x[c(1,3)] <- c(144, 169)
> x
[1] 144 125 169

1. 逻辑向量

v为和x等长的逻辑向量,x[v]表示取出所有v为真值的元素,例如:
> x <- c(1,4,7)
> x < 5
[1] TRUE TRUE FALSE
> x[x<5]
[1] 1 4
通过向量可做相应的运算
> y <- c(-1, 1, 2, 3, NA)
> (y+1)[(!is.na(y)) & y>0] -> x# y+1表示y向量的各个分量加1,(!is.na(y)),y向量内取非NA值,&,同时,y>0取y内大于0的数
> x
[1] 2 3 4

改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数,例如:
y = 1-x, x<0;y = 1+x, x>=0
可以用:
> x <- c(-2,3,0,-4,1); x
[1] -2 3 0 -4 1
> y <- numeric(length(x)); y
[1] 0 0 0 0 0
> y[x<0] <- 1 - x[x<0]
> y[x>=0] <- 1 + x[x>=0]
> y
[1] 3 4 1 5 2
> x
[1] -2 3 0 -4 1
其中,numeric()函数的功能是产生数值型向量
is.numeric(x)判断该x向量是否为数值向量,是返回TRUE,否返回FALSE
as.numeric(x)将向量x定义为数值向量,字符型的数字例如"146",直接定义为146,单纯的字符型例如"CCF",会被定义为NA。
> a <- c(1,2,'a','c')
> is.numeric(a)
[1] FALSE
> as.numeric(a)
[1] 1 2 NA NA
Warning message:
强制改变过程中产生了NA

2. 下标的正整数运算

v为一个向量,下标取值在1到length(v)之间,取值允许重复,例如:
> v <- 10:20
> v[c(1,3,5,7)]
[1] 10 12 14 16
> v[rep(c(2,1,3), times=3)]
[1] 11 10 12 11 10 12 11 10 12

3. 下标的负整数运算

v为一个向量,下标取值在-length(v)到-1之间,例如:
> v[-(1:5)]
[1] 15 16 17 18 19 20
> v
[1] 10 11 12 13 14 15 16 17 18 19 20
这里表示**扣除相应的分量之后显示剩下的分量,v[-1]表示扣除v中的第一个分量,这里与python有所不同的是,python的负数取分量是逆向切片取值,所以不要混淆**

4. 取字符型的值的下标向量

在定义向量时可以给元素加上名字,例如:
> ages <- c(Li=33, Zhang=29, Liu=18)
> ages
Li Zhang Liu
33 29 18
可以用元素名字来访问元素或元素子集
> ages['Zhang']#作用有点相当于python当中的字典
Zhang
29
向量元素名可在定义向量后加入,例如:
> fruit_price <- c(10, 4, 7, 6)
> names(fruit_price) <- c('orange','banana','apple','peach')
> fruit_price
orange banana apple peach
10 4 7 6

R(02):第二章:2.2数字、字符与向量(2)相关推荐

  1. 传感器检测技术及仪表笔记02第二章 检测系统的基本特性

    第二章 检测系统的基本特性 2.1 传感器的基本特征 2.1.1常用概念 测量范围 上下限 量程 满量程输出 2.2传感器的静态特性 ==线性度== ==灵敏度== ==分辨率==(分辨力) ==阈值 ...

  2. 统计学习导论:基于R应用——第二章习题

    目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...

  3. 基于全生命周期的主数据管理:MDM详解与实战学习02 第二章 主数据管理的内涵

    第二章 主数据管理的内涵 导读 2.1 主数据的概念 2.1.1 主数据的定义 2.1.2 主数据的特征 2.1.3 主数据的范围 1.描述实体范围 2.应用层次范围 (1)元数据 (2)引用数据 ( ...

  4. R语言分析(二)——薛毅R语言第二章后面习题解析

    包括2.2-2.6中间的习题,2.2的习题中第三问和第四问,应该有其他的解答方法,但我看他的题目,似乎是在A和B的基础上进行,所以就选择了使用for循环的方法 做着习题,又不断查着书,这样,书籍也熟悉 ...

  5. 金融数据分析导论基于R语言 第二章 金融时间序列的线性模型课后习题答案

    1.考虑从1948年1月到2011年11月美国失业率的月数据(见文件m-unrate-4811.txt),数据来目美国圣路易斯的联邦储备银行. (a)该除非特别声明,在以下习题中都用5%的显著性水平来 ...

  6. python笔记第二章---变量

    第二章:二进制与字符编码 1.二进制与字符编码 机器认识的ASCII表---对应8个位置等于1byte   1024byte=1kb   1024kb=1mb   1024mb=1024GB  102 ...

  7. DIP第二章习题解答

    数字图像处理 第二章课后作业 下载地址:数字图像处理第二章课后作业.pdf_数字图像处理第二章完整答案,数字图像处理第二章课后答案-图像处理文档类资源-CSDN下载https://download.c ...

  8. 数字图像处理:第二章 图象获取、显示、表示与处理

    第二章 图象获取.显示.表示与处理 图象获取是图象的数字化过程,显示则是将数字图象转化为适合人们使用的形式,而处理是通过软件对图象进行变换操作的过程. 目录 图象获取 图象显示 图象表示 图象处理 参 ...

  9. 第二章 数据的表示和运算 2.1.3 字符与字符串 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.3 字符与字符串 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: ASCII码/汉字编码 字符 ...

最新文章

  1. 栈(Stack) 任何程序执行前,预先分配一固定长度的内存空间
  2. mysql 检查哪些项目_mysql根据内容查询在哪个表.go
  3. 前端学习(3310):redux的state hook对象
  4. SpringCloud学习--微服务架构
  5. CDOJ 1805 矩阵 数学
  6. Shell 脚本实例
  7. php curl 返回cookie_分享新浪图床上传接口PHP源码
  8. TCP/IP 协议大致的概念
  9. 【Redis 开发与运维】初识 Redis
  10. pop3邮箱怎么设置收发服务器端口,pop3设置(如何设置邮箱服务器?IMAP、POP3有何区别?)...
  11. 集成Fbreader显示空白页
  12. Problem A: 零起点学算法93——矩阵转置
  13. Writeup For WeChall
  14. ie11 java 下载文件_Javaweb实现上传下载文件的多种方法
  15. 波数与波长 matlab,波长与波数的关系为.PPT
  16. 解决json数据 key为数字,自动排序问题
  17. 项目管理五大过程与十大知识领域
  18. 书论81 阮元《北碑南帖论》
  19. 2009年诺基亚中国开发伙伴峰会召开
  20. axios 拦截器分析

热门文章

  1. 语音信号作业 清音浊音分析python
  2. 魔兽世界服务端源码各个重要文件详细情况说明——魔兽世界开服
  3. [JAVA]爬取百度关于关键字的诗句
  4. CAD二次开发学习笔记五(在ObjectARX中使用MFC)
  5. dm365 ubl splash logo
  6. 餐厅放话全部免费吃,老板和客户都疯了,目前使用最简单的套路!
  7. 使用 React 和 Threejs 创建一个VR全景项目
  8. 纯小白新人菜鸟第一次unity VR项目与matlab联动调试过程记录超详细版本2023.3.12
  9. CorelDRAW 足球制作完你一个自己绘出足球的梦
  10. JAVA如何遍历arraylist数组,Java 程序使用Lambda表达式遍历ArrayList