R语言的向量对象运算

数值型的向量对象

x <- 1:5    #使用序号来进行建立
y <- -3:-5
z <- 1.5:4.7
print(x)
print(y)
print(z)
[1] 1 2 3 4 5
[1] -3 -4 -5
[1] 1.5 2.5 3.5 4.5

向量对象的一个重要功能是向量对象在执行运算时,向量对象内的所有元素将同时进行运算

x <- 1:5
​
y <- x + 3
y

  1. 4
  2. 5
  3. 6
  4. 7
  5. 8

x <- 1:5
y <- x + 6:10
y

  1. 7
  2. 9
  3. 11
  4. 13
  5. 15

如果处理不同长度的向量对象,但先决条件是较长的向量是较短向量的长度的备注,如果不是,则会出现错误信息

x <- 1:5
y <- x + 6:15
y

  1. 7
  2. 9
  3. 11
  4. 13
  5. 15
  6. 12
  7. 14
  8. 16
  9. 18
  10. 20

对象函数seq

seq函数,可以用于建立一个规则型的数值向量对象

#form:向量对象的起始值
#to:向量对象的最终值
#by:每个元素的增值
#length.out:如果省略by,同时没有length.out,默认增值是-1或者1,length.out可以设定元素个数
seq(from,to,by = width,length.out = numbers)
​
y <- seq(1,9,by = 2)
y

  1. 1
  2. 3
  3. 5
  4. 7
  5. 9

连接向量对象函数c

c()函数可以用于连接两个向量对象

#产生一个向量
y <- c(1,3,7,2)
x <- c(4,5,6,9)
z <- c(x,y)
z

  1. 4
  2. 5
  3. 6
  4. 9
  5. 1
  6. 3
  7. 7
  8. 2

重复向量对象函数rep

如果向量对象内某些元素是重复的,那么可以使用rep()函数来进行建立向量对象

#x:重复的向量元素
#times:重复次数
#each:每次每个元素的重复次数
#length.out:向量长度
rep(x,times = 3,each = 3,length.out = 5)
rep(5,5)

  1. 5
  2. 5
  3. 5
  4. 5
  5. 5

rep(1:5,3)

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 1
  7. 2
  8. 3
  9. 4
  10. 5
  11. 1
  12. 2
  13. 3
  14. 4
  15. 5

rep(1:3,each = 2,length.out = 4)

  1. 1
  2. 1
  3. 2
  4. 2

numeric()函数

用于建立一个固定长度的向量对象,同时向量对象元素的默认值是0

numeric(4)

  1. 0
  2. 0
  3. 0
  4. 0

程序语句的跨行处理

  • 该行以数学符号结尾,此时R语言会知道下一行是接续的
  • 使用左括号,R会知道下一行出现的片段数据是统一括号内的命令,直到出现右括号
  • 字符串,读到左边双引号后,要读到右边双引号才结束
coffee.Knowledge <- "coffee is mainly produces
in frigid regions."
coffee.Knowledge

‘coffee is mainly produces\nin frigid regions.’

向量对象的数学运算

  • sum() 计算所有元素的和
  • max() 计算所有元素的最大值
  • min() 计算所有元素的最小值
  • mean() 计算所有元素的平均值
#计算所有元素的积
prod(1:5)  #相当于在计算阶乘

120

积累运算

  • cumsum():计算所有元素的累积和
  • cumprod():计算所有元素的累积积
  • cummax():返回各元素从向量起点到该元素位置间所有元素的最大值
  • cummin():返回各元素从向量起点到该元素位置间所有元素的最小值
y <- 1:5
y

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

cumsum(y)

  1. 1
  2. 3
  3. 6
  4. 10
  5. 15

cumprod(y)

  1. 1
  2. 2
  3. 6
  4. 24
  5. 120

cummax(y)

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

差值运算函数

  • diff():返回各元素与下一个元素的差

排序函数

#默认是从小排到大,如果decreasing为TRUE,则是大到小
sort(x,decreasing = FALSE)

#这个向量对象的内容是元向量对象的各元素在原向量对象从小排到大排序后所得向量对象中的位次
rank()

#这个函数可将向量对象颠倒排列
rev()
y <- c(10,5,9,15,7,11)
sort(y)
y

  1. 5
  2. 7
  3. 9
  4. 10
  5. 11
  6. 15

​​

  1. 10
  2. 5
  3. 9
  4. 15
  5. 7
  6. 11

x <- rank(y)
x

  1. 4
  2. 1
  3. 3
  4. 6
  5. 2
  6. 5

x <- rev(x)
x

  1. 5
  2. 2
  3. 6
  4. 3
  5. 1
  6. 4

基本统计函数

  • sd():计算样本的标准偏差
  • var():计算样本的变异数
y <- c(11,15,18)
sd(y)

3.51188458428425

Inf、-Inf、NA的向量运算

  • 如果函数中的向量对象的参数包含NA,则运算结果是NA
  • 为了克服向量对象的元素可能有缺失值NA的情形,通常在函数内加上“na.rm = TRUE”,这样即可正常运算
max(c(98,54,123,NA),na.rm = TRUE)

123

R语言的字符串数据的属性

  • integer:整数
  • double:R处理实数运算时,默认是用双倍精度实数计算和存储
  • character:字符串,可以用双引号,也可以用单引号

常用函数

length():计算向量的长度

nchar():计算字符串向量中每个字符串的字符数

x <- c("12","13","14")
length(x)
nchar(x)

3​

  1. 2
  2. 2
  3. 2

探索对象的属性

判断对象属性函数

is.integer():是否为整数

is.numeric():是否为数字

is.double():用于判断对象元素是否为双倍精度实数

is.character():用于判断对象元素是否为字符串

读取对象的结构

str():用于显示对象的结构内容

basket.lin <- c(7,8,6,11,9,12)
str(basket.lin)  #数字类型   6个元素   元素内容
 num [1:6] 7 8 6 11 9 12

了解对象元素类型

class():用于显示对象的类型,如果一个向量中有多种类型的数据,则显示字符类型

class(c(1,2,3))

‘numeric’

class(c(1.5,1.6,1.7))

‘numeric’

class(c("he","yang"))

‘character’

向量对象元素的存取

我们可以使用索引的方式取得向量对象的元素,arr[1],但是不同的是,R语言的索引是从1开始的,而不是从0开始。

同时,R语言的索引也可以是一个向量对象,因此我们可以利用索引的向量对象来将向量进行切片,或者向量对象中的某一片段

x <- c(32,34,56,78,90,12,34)
print(x[1])
[1] 32
#获取其中的切片内容
print(x[1:3])
[1] 32 34 56

如果想要获取向量对象开头和结尾的数据,则可以使用下面两个函数来进行

head(object,count)  #取object对象开头的count个数据
tail(object,count)  #取object对象结尾的count个数据

负索引的应用

与Python不同的是,在R语言当中的负索引不表示从右往左进行取数,而是获得不包含该索引对应元素的向量对象对象,我们可以用于删除某一元素来进行使用

y <- 1:5
print(y[-1])  #打印出的结果不包含第一个元素
[1] 2 3 4 5

如果想要修改某一元素的值,则直接进行赋值即可

y[1] <- 2
y

  1. 2
  2. 2
  3. 3
  4. 4
  5. 5

逻辑向量

与Python一样,R语言中也可以使用逻辑表达式来测试结果,如果为真,则返回TRUE,如果为假,则范围FALSE,

图片[1]-R语言的向量对象运算-四曲博客

which()函数所使用的参数是一个比较表达式,可以列出符合条件的索引值,可以用于找出向量对象中哪些元素是符合条件的

x <- c(12,3,45,6,23)
which(x > 10)

  1. 1
  2. 3
  3. 5

  • which.max():可以列出最大值的第1个索引值
  • which.min():可以列出最小值的第1个索引值
which.max(x)
which.min(x)

3

2

特殊值的处理方法

x <- c(9,1,NA,8,6)
x[x > 5]   #对于任何比较,对于NA而言均是返回NA

  1. 9
  2. <NA>
  3. 8
  4. 6

x <- c(9,1,NA,8,6)
x > 5

  1. TRUE
  2. FALSE
  3. <NA>
  4. TRUE
  5. TRUE

x <- c(9,1,Inf,8,6)
x[x>5]

  1. 9
  2. Inf
  3. 8
  4. 6

x <- c(9,1,-Inf,8,6)
x[x > 5]

  1. 9
  2. 8
  3. 6

#使用程序剔除NA
x <- c(9,3,2,4,7,8,NA)
x <- x[x > 5 & !is.na(x)]
x

  1. 9
  2. 7
  3. 8

逻辑值的运算

与其他高级语言一样,R语言也将TRUE看成是1,将FALSE看成是0来进行使用,那么逻辑值也是可以参与到具体的运算当中的

j <- c(12,8,9,15,7,12)
l <- c(7,8,6,11,9,12)
sum(j >= l)

5

  • any():只要参数向量对象中有1个元素是TRUE,则返回TRUE
  • all():只有参数中所有元素都必须均是TRUE,结果才返回TRUE

不同长度向量相乘的运用

基本原则:长的向量对象是短的向量对象的倍数

j <- c(12,3,8,2,9,4,15,5,7,2,12,3)
s <- j * c(2,3)
s

  1. 24
  2. 9
  3. 16
  4. 6
  5. 18
  6. 12
  7. 30
  8. 15
  9. 14
  10. 6
  11. 24
  12. 9

给向量的元素命名

我们可以在建立向量时,给向量的每一个元素进行命名,未来我们也可以利用对象的元素名称引用元素的内容

object <- c(name1 = data1,name2 = data2,...)
J <- c(first = 28,second = 31,third = 35)
print(J[1])
print(J[2])
first 
   28 
second 
    31 
#使用names()函数可以查询向量对象元素的名称,也可更改向量对象元素的名称
names(J)

  1. ‘first’
  2. ‘second’
  3. ‘third’

names(J) <- c("game1",'game2','game3')
names(J)

  1. ‘game1’
  2. ‘game2’
  3. ‘game3’

#如果想要删除名称,则将其设置为NULL
names(J) <- NULL
names(J)
NULL

我们可以使用month.name一个系统内建的一个数据集

month.data <- c(31,28,31,30,31,30,31,31,30,31,30,31)
names(month.data) <- month.name
month.data

​January31February28March31April30May31June30July31August31September30October31November30December31​

islands数据集,含有全球48个岛屿的名称以及面积,我们也可以利用这个数据集来做各种各样的统计分析

islands

​Africa11506Antarctica5500Asia16988Australia2968Axel Heiberg16Baffin184Banks23Borneo280Britain84Celebes73Celon25Cuba43Devon21Ellesmere82Europe3745Greenland840Hainan13Hispaniola30Hokkaido30Honshu89Iceland40Ireland33Java49Kyushu14Luzon42Madagascar227Melville16Mindanao36Moluccas29New Britain15New Guinea306New Zealand (N)44New Zealand (S)58Newfoundland43North America9390Novaya Zemlya32Prince of Wales13Sakhalin29South America6795Southampton16Spitsbergen15Sumatra183Taiwan14Tasmania26Tierra del Fuego19Timor13Vancouver12Victoria82​

实际操作题

  • 建立家人的向量数据
  1. 将家人的血型建立为字符向量对象,同时为每一个元素建立名称,并打印
blood <- c("son" = "o","brother" = 'a',"me" = "b","mom" = "a")
blood

​son’o’brother’a’me’b’mom’a’​

  • 建立5位同队NBA球星的得分数据向量对象
  1. 找到自己喜欢的球队和球星,为他们的10场比赛建立5场进球数的向量对象,以及罚球数的向量对象
a_j <- c(3,4,5,6,4,5,3,6,8,9)
b_j <- c(3,4,3,6,0,2,3,6,3,9)
c_j <- c(3,9,3,6,2,2,0,5,2,9)
d_j <- c(3,3,3,6,4,2,5,6,7,9)
e_j <- c(3,2,4,8,8,0,3,6,8,9)
​
a_f <- c(0,2,1,2,0,1,2,0,1,2)
b_f <- c(0,2,1,1,0,1,2,0,0,1)
c_f <- c(0,1,1,2,0,0,2,0,1,2)
d_f <- c(0,0,2,2,0,1,3,0,1,0)
e_f <- c(0,2,1,2,0,1,2,0,2,2)

2.假设5位球星,每场比赛会进一个3分求,为进球则是0分,请计算这5位球星的总得分以及平均得分

a_score <- (sum(a_j) - length(a_j[a_j > 0]))* 2 + length(a_j[a_j > 0]) * 3
b_score <- (sum(b_j) - length(b_j[b_j > 0]))* 2 + length(b_j[b_j > 0]) * 3
c_score <- (sum(c_j) - length(c_j[c_j > 0]))* 2 + length(c_j[c_j > 0]) * 3
d_score <- (sum(d_j) - length(d_j[d_j > 0]))* 2 + length(d_j[d_j > 0]) * 3
e_score <- (sum(e_j) - length(e_j[e_j > 0]))* 2 + length(e_j[e_j > 0]) * 3
score_list <- c(a_score,b_score,c_score,d_score,e_score)
​
#计算总分
sum(score_list)
mean(score_list)

511

102.2

  • 使用系统内建数据集islands,列出排序第30和35名的岛名称和面积
x <- sort(islands,decreasing = TRUE)
print(x[30])
print(x[35])
Hokkaido 
      30 
Banks 
   23 
  • 使用系统内建数据集islands,列出前15大和最后15大的岛名称和面积
x <- sort(islands,decreasing = TRUE)
head(x,15)
tail(x,15)

​Asia16988Africa11506North America9390South America6795Antarctica5500Europe3745Australia2968Greenland840New Guinea306Borneo280Madagascar227Baffin184Sumatra183Honshu89Britain84​​Celon25Banks23Devon21Tierra del Fuego19Axel Heiberg16Melville16Southampton16New Britain15Spitsbergen15Kyushu14Taiwan14Hainan13Prince of Wales13Timor13Vancouver12​

  • 使用系统内建数据集islands,分别列出排在奇数位和偶数位的岛名称和面积
x <- sort(islands,decreasing = TRUE)
x[seq(1,length(x),by = 2)]   #排在奇数位的数据
x[seq(2,length(x),by = 2)]   #排在偶数位的数据

​Asia16988North America9390Antarctica5500Australia2968New Guinea306Madagascar227Sumatra183Britain84Victoria82New Zealand (S)58New Zealand (N)44Newfoundland43Iceland40Ireland33Hispaniola30Moluccas29Tasmania26Banks23Tierra del Fuego19Melville16New Britain15Kyushu14Hainan13Timor13​​Africa11506South America6795Europe3745Greenland840Borneo280Baffin184Honshu89Ellesmere82Celebes73Java49Cuba43Luzon42Mindanao36Novaya Zemlya32Hokkaido30Sakhalin29Celon25Devon21Axel Heiberg16Southampton16Spitsbergen15Taiwan14Prince of Wales13Vancouver12​

© 版权声明
THE END
喜欢就支持以下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片