R语言学习(4)——R中的数据结构之向量

上一期文章
R语言学习(3)——R中变量的创建和删除及数据类型



向量的创建

向量是 R 语言中最基本的数据结构,可以通过 c()函数将给定的值来构造向量

# 生成数值型向量
c(2, 4, 6, 8)
#[1] 2 4 6 8
c(2:6) # 生成2-6的数值型向量,步长为1
#[1] 2 3 4 5 6
c(pi, 1.25, 1.36, 1)
#[1] 3.141593 1.250000 1.360000 1.000000

# 生成字符型向量
c("a", "b", "c")
#[1] "a" "b" "c"

# 生成逻辑型向量
c(TRUE, FALSE, TRUE, FALSE)
#[1]  TRUE FALSE  TRUE FALSE

# 生成复数向量
complex_data <- complex(real = c(1:5), imaginary = c(5:1))
complex_data
#[1] 1+5i 2+4i 3+3i 4+2i 5+1i

# 生成原始型向量
raw_data <- charToRaw("abcde")
raw_data
#[1] 61 62 63 64 65

单个值可以看作长度为1的向量,可以使用length()函数查看向量的长度

length(1)

length("a")
length(TRUE)

length(complex_data)
#[1] 5

length(complex_data)
#[1] 5

length(raw_data)
#[1] 5

向量中元素必须为相同的数据类型,如果为不同的数据类型,R会强制转换成相同的类型。

数据类型转换的优先级为:Character > Numeric > Logical

data_set <- c("a", 1:2, TRUE, FALSE)
data_set
#[1] "a"     "1"     "2"     "TRUE"  "FALSE"
typeof(data_set)
#[1] "character"

data_set <- c(1:2, TRUE, FALSE)
data_set
#[1] 1 2 1 0
typeof(data_set)
#[1] "integer"

向量中元素的命名

使用names()函数可以为向量的每个元素命名

name <- c("小王", "小李", "小张", "小陈", "小赵")
name
#[1] "小王" "小李" "小张" "小陈" "小赵"

score <- c(75, 66, 69, 85, 76)
score
#[1] 75 66 69 85 76

names(score) <- name
score
#小王 小李 小张 小陈 小赵 
# 75   66   69   85   76 

# 也可以通过下面的方式直接给向量中的元素命名
score <- c("小王" = 75, "小李" = 66, "小张" = 69, "小陈" = 85, "小赵" = 76)
score
#小王 小李 小张 小陈 小赵 
# 75   66   69   85   76 

运算符

算术运算

算术运算符含义
+
-
*
/
^或**幂次
%%求余数
%/%整除

单个数值之间的运算,例如:

2 + 4
#[1] 6

2 - 4
#[1] -2

2 * 4
#[1] 8

2 / 4
#[1] 0.5

2^4
#[1] 16

2**4
#[1] 16

7 %% 2
#[1] 1

7 %/% 2
#[1] 3

-2 %/% 4
#[1] -1

数值型向量与单个数值的算术运算规则为每个元素与单个数值之间进行运算,例如:

data_set <- c(-4, -1, 2, 4, 6, 7)
data_set + 2
#[1] -2  1  4  6  8  9

data_set - 4
#[1] -8 -5 -2  0  2  3

data_set * 3
#[1] -12  -3   6  12  18  21

data_set / 4
#[1] -1.00 -0.25  0.50  1.00  1.50  1.75

data_set^3
#[1] -64  -1   8  64 216 343

data_set %% 2
#[1] 0 1 0 0 0 1

data_set %/% 4
#[1] -1 -1  0  1  1  1

等长数值型向量之间的算术运算规则为对应元素之间进行运算,例如:

data_set1 <- c(-4, 7)
data_set2 <- c(2, -3)

data_set1 + data_set2
#[1] -2  4

data_set1 - data_set2
#[1] -6 10

data_set1 * data_set2
#[1]  -8 -21

data_set1 / data_set2
#[1] -2.000000 -2.333333

data_set1^data_set2
#[1] -2.000000 -2.333333

data_set1 %% data_set2
#[1]  0 -2

data_set1 %/% data_set2
#[1] -2 -3

不等长数值型向量的算术运算时,会将长度较短的向量循环使用,例如:

data_set1 <- c(-4, 1, 7)
data_set2 <- c(2, -3)

# 相当于向量c(-4, 1, 7)和向量c(2, -3, 2)进行算术运算
data_set1 + data_set2
#[1] -2 -2  9
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 - data_set2
#[1] -6  4  5
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 * data_set2
#[1] -8 -3 14
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 / data_set2
#[1] -2.0000000 -0.3333333  3.5000000
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1^data_set2
#[1] 16  1 49
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 %% data_set2
#[1]  0 -2  1
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 %/% data_set2
#[1] -2 -1  3
#Warning message:
#In data_set1 + data_set2 : 长的对象长度不是短的对象长度的整倍数

逻辑型向量也可以像数值型向量进行算术运算,TRUE表示1,FALSE表示0

关系运算符

关系运算符含义
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!=不等于

单个值之间的关系运算,例如:

2 < 4
#[1] TRUE

2 <= 4
#[1] TRUE

2 > 4
#[1] FALSE

2 >= 4
#[1] FALSE

2 == 4
#[1] FALSE

2 != 4
#[1] TRUE

"a" == "b"
#[1] FALSE

"a" != "b"
#[1] TRUE

# 逻辑值之间的关系运算时,TRUE相当于数值1,FALSE相当于数值0
TRUE < FALSE
#[1] FALSE

TRUE <= FALSE
#[1] FALSE

TRUE > FALSE
#[1] TRUE

TRUE >= FALSE
#[1] TRUE

TRUE == FALSE
#[1] FALSE

TRUE != FALSE
#[1] TRUE

向量和单个值之间进行关系运算时,向量中的每个元素均与单个值进行比较,例如:

data_set1 <- c(1:3)

data_set1 < 2
#[1]  TRUE FALSE FALSE

data_set1 <= 2
#[1]  TRUE  TRUE FALSE

data_set1 > 2
#[1] FALSE FALSE  TRUE

data_set1 >= 2
#[1] FALSE  TRUE  TRUE

data_set1 == 2
#[1] FALSE  TRUE FALSE

data_set1 != 2
#[1]  TRUE FALSE  TRUE

data_set2 <- c("a", "b", "ab")

data_set2 == "a"
#[1]  TRUE FALSE FALSE

data_set2 != "a"
#[1] FALSE  TRUE  TRUE

data_set3 <- c(TRUE, FALSE, TRUE)

data_set3 == TRUE
#[1]  TRUE FALSE  TRUE

data_set3 != TRUE
#[1] FALSE  TRUE FALSE

等长向量之间在进行关系运算时,对应元素之间将会比较,例如:

data_set1 <- c(1:3)
data_set2 <- c(3:1)

data_set1 < data_set2
#[1]  TRUE FALSE FALSE

data_set1 <= data_set2
#[1]  TRUE  TRUE FALSE

data_set1 > data_set2
#[1] FALSE FALSE  TRUE

data_set1 >= data_set2
#[1] FALSE  TRUE  TRUE

data_set1 == data_set2
#[1] FALSE  TRUE FALSE

data_set1 != data_set2
#[1]  TRUE FALSE  TRUE

data_set3 <- c("a", "b", "ab")
data_set4 <- c("ab", "b", "a")

data_set3 == data_set4
#[1] FALSE  TRUE FALSE

data_set3 != data_set4
#[1]  TRUE FALSE  TRUE

data_set5 <- c(TRUE, FALSE, TRUE)
data_set6 <- c(FALSE, TRUE, FALSE)

data_set5 == data_set6
#[1] FALSE FALSE FALSE

data_set5 != data_set6
#[1] TRUE TRUE TRUE

不等长数值型向量的算术运算时,会将长度较短的向量循环使用,例如:

data_set1 <- c(1:5)
data_set2 <- c(3:1)

# 相当于向量c(1, 2,,3, 4, 5)和向量c(3, 2, 1, 3, 2)之间进行关系运算
data_set1 < data_set2
#[1]  TRUE FALSE FALSE FALSE FALSE
#Warning message:
#In data_set1 < data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 <= data_set2
#[1]  TRUE  TRUE FALSE FALSE FALSE
#Warning message:
#In data_set1 <= data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 > data_set2
#[1] FALSE FALSE  TRUE  TRUE  TRUE
#Warning message:
#In data_set1 > data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 >= data_set2
#[1] FALSE  TRUE  TRUE  TRUE  TRUE
#Warning message:
#In data_set1 >= data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 == data_set2
#[1] FALSE  TRUE FALSE FALSE FALSE
#Warning message:
#In data_set1 == data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 != data_set2
#[1]  TRUE FALSE  TRUE  TRUE  TRUE
#Warning message:
#In data_set1 != data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set3 <- c("a", "b", "ab")
data_set4 <- c("ab", "b")

# 相当于向量c("a", "b", "ab")和向量c("ab", "b", "ab")之间进行关系运算
data_set3 == data_set4
#[1] FALSE  TRUE  TRUE
#Warning message:
#In data_set3 == data_set4 : 长的对象长度不是短的对象长度的整倍数

data_set3 != data_set4
#[1]  TRUE FALSE FALSE
#Warning message:
#In data_set3 != data_set4 : 长的对象长度不是短的对象长度的整倍数

data_set5 <- c(TRUE, FALSE, TRUE)
data_set6 <- c(FALSE, TRUE)

# 相当于向量c(TRUE, FALSE, TRUE)和向量c(FALSE, TRUE, FALSE)之间进行关系运算
data_set5 == data_set6
#[1] FALSE FALSE FALSE
#Warning message:
#In data_set5 == data_set6 : 长的对象长度不是短的对象长度的整倍数

data_set5 != data_set6
#[1] TRUE TRUE TRUE
#Warning message:
#In data_set5 != data_set6 : 长的对象长度不是短的对象长度的整倍数

逻辑运算符

逻辑运算只适用于数值,逻辑值或复数值数据类型。在数值型数据类型中,只有0表示为FALSE,其余数值表示为TRUE;在数值型数据类型中,只有0表示为FALSE,其余数值表示为TRUE;

逻辑运算符含义
!
|
&

单个值之间的逻辑运算,例如:

#非逻辑运算
!TRUE
#[1] FALSE

!FALSE
#[1] TRUE

!1
#[1] FALSE

!0
#[1] TRUE

TRUE & TRUE
#[1] TRUE

TRUE & FALSE
#[1] FALSE

FALSE & FALSE
#[1] FALSE

等长向量之间的逻辑运算,例如:

data_set1 <- c(1:3)
data_set2 <- c(3:1)

data_set1 & data_set2
#[1] TRUE TRUE TRUE

data_set1 | data_set2
#[1] TRUE TRUE TRUE

!data_set1
#[1] FALSE FALSE FALSE

!data_set2
#[1] FALSE FALSE FALSE

data_set3 <- c(TRUE, FALSE, TRUE)
data_set4 <- c(FALSE, TRUE, TRUE)

data_set3 & data_set4
#[1] FALSE FALSE  TRUE

data_set3 | data_set4
#[1] TRUE TRUE TRUE

!data_set3
#[1] FALSE  TRUE FALSE

!data_set4
#[1]  TRUE FALSE FALSE

不等长数值型向量的逻辑运算时,会将长度较短的向量循环使用,例如:

data_set1 <- c(1:5)
data_set2 <- c(3:1)

data_set1 & data_set2
#[1] TRUE TRUE TRUE TRUE TRUE
#Warning message:
#In data_set1 & data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set1 | data_set2
#[1] TRUE TRUE TRUE TRUE TRUE
#Warning message:
#In data_set1 | data_set2 : 长的对象长度不是短的对象长度的整倍数

data_set3 <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
data_set4 <- c(FALSE, TRUE, TRUE)

data_set3 & data_set4
#[1] FALSE FALSE  TRUE FALSE FALSE
#Warning message:
#In data_set3 & data_set4 : 长的对象长度不是短的对象长度的整倍数

data_set3 | data_set4
#[1] TRUE TRUE TRUE TRUE TRUE
#Warning message:
#In data_set3 | data_set4 : 长的对象长度不是短的对象长度的整倍数

获取向量中的元素

通过元素的位置索引获取向量中的元素

在R中,元素的位置索引从1开始,可以使用方括号([])来获取向量中的元素

data_set <- c(5, 4, 3, 2, 1, 0)

data_set[2]
#[1] 4

data_set[3:5]
#[1] 3 2 1

# 当索引大于向量的长度时,则会返回缺失值NA
data_set[7]
#[1] NA

data_set[c(3, 5)]
#[1] 3 1

通过逻辑型向量获取向量中的元素

data_set <- c(5, 4, 3, 2, 1, 0)
data_set[c(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE)]
#[1] 5 3 1 0

# 当逻辑型向量小于向量的长度时,逻辑向量则会循环使用
data_set[c(TRUE, FALSE)]
#[1] 5 3 1
#相当于data_set[c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)]

# 当逻辑型向量大于向量的长度时,多余部分TRUE对应的元素将会返回为缺失值NA
data_set[c(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE)]
# [1]  5  3  1  0 NA

data_set[data_set > 3 & data_set < 5]
#[1] 4

通过元素名字获取向量中的元素

name <- c("小王", "小李", "小张", "小陈", "小赵")
score <- c(75, 66, 69, 85, 76)
names(score) <- name

#当使用非向量中的元素名时,则会返回为缺失值NA
score[c("小王", "小陈", "小刘")]
#小王 小陈 <NA> 
# 75   85   NA

使用which()函数进行筛选

which()函数返回结果为TURE对应向量元素的位置,使用which()进行函数来筛选本质上是通过元素的位置索引获取向量中的元素

data <- c(1, 3, 5, 7)
which(data == 3)
#[1] 2

data[which(data == 3)]
#[1] 3

向量元素的扩展、替换和删除

元素的扩展

使用c()函数,直接将多个向量合并

data_set1 <- c(5:7)
data_set2 <- c(1, 8)
data_set3 <- c(2, 4)
data_set <- c(data_set1, data_set2, data_set3, 3)
data_set
#[1] 5 6 7 1 8 2 4 3

使用append()函数在指定的位置添加元素

# 不指定元素添加的位置c()函数的功能一直
append(data_set1, data_set2)
#[1] 5 6 7 1 8

# 指定元素添加的位置
# 在data_set1向量的第二个元素之后插入data_set2向量
append(data_set1, data_set2, 2)
#[1] 5 6 1 8 7

# 在data_set1向量之前插入data_set2向量
append(data_set1, data_set2, 0)
#[1] 1 8 5 6 7

元素的替换

data_set <- 1:6
data_set
#[1] 1 2 3 4 5 6

data_set[1] <- 7
data_set
#[1] 7 2 3 4 5 6

data_set[2:4] <- 8
data_set
#[1] 7 8 8 8 5 6

data_set[5:6] <- c(10, 9)
data_set
#[1]  7  8  8  8 10  9

元素的删除

在位置索引前加负号(-),可以删除向量中对应位置的元素。

data_set <- 1:6
data_set
#[1] 1 2 3 4 5 6

data_set[-1]
#[1] 2 3 4 5 6

data_set[-c(2:4)]
#[1] 1 5 6

向量的排序

sort()函数

sort(x, decreasing = FALSE, na.last = NA, index.return = FASLE, …)

x 为要被排序的向量;

decreasing 为排序的顺序,默认为FALSE,即为升序,若为TRUE则按照降序排列;

na.last 是对向量中NA值的处理,默认值为NA,会删除向量中的NA,若为TRUE,则将NA值放在最后;若为FALSE,将NA值放在最前面;

index.return 默认值为FALSE,若设置为TRUE则还会返回原来未排序前元素所处的位置,若index.return = TRUE,na.last必须设置为NA。

data_set <- c(10, NA, 9, 10, 8, 13, 10, 10, 12)
data_set
#[1] 10 NA  9 10  8 13 10 10 12

sort(data_set)
#[1]  8  9 10 10 10 10 12 13

sort(data_set, index.return = TRUE)
#$x
#[1]  8  9 10 10 10 10 12 13
#
#$ix
#[1] 4 2 1 3 6 7 8 5

order()函数

返回升序排序后,在原有向量中元素的位置

data_set <- c(3, 4, 2, 1)
data_set
#[1] 3 4 2 1

order(data_set)
#[1] 4 3 1 2

rank()函数

返回升序排序后,向量中每个元素对应的秩,即在新向量中的位置

data_set <- c(8, 6, 1, 5)
data_set
#[1] 8 6 1 5

rank(data_set)
#[1] 4 3 1 2
  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言,可以使用向量来存放一串数据。向量是一种基本的数据结构,可以存储相同类型的数据。可以使用c()函数来创建向量,其每个元素用逗号隔开。例如,要存放一串数字,可以使用以下代码: data <- c(1, 2, 3, 4, 5) 其,data是向量的名称,1, 2, 3, 4, 5分别是向量的元素。可以通过调用data来访问向量的元素。 如果要存放一串字符,可以使用以下代码: data <- c("Tom", "Bob", "Tim", "王二", "张三", "李四") 其,"Tom", "Bob", "Tim", "王二", "张三", "李四"分别是向量的元素。同样,可以通过调用data来访问向量的元素。 另外,如果要在向量存放不同类型的数据,可以使用数据框(data.frame)来实现。数据框是R语言常用的数据结构,可以存储多种类型的数据。可以使用data.frame()函数来创建数据框。例如,要存放一列学生的ID、姓名和数学成绩,可以使用以下代码: ID <- c(101, 102, 103, 104, 105, 106) name <- c('Tom', 'Bob', 'Tim', '王二', '张三', '李四') math_score <- c(88, 70, 65, 77, 64, 80) data <- data.frame(ID, name, math_score) 其,ID、name和math_score分别是数据框的列,c()函数用于创建向量,data.frame()函数用于创建数据框。 希望这个回答能解决你的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [R语言数据清洗作业](https://blog.csdn.net/zp1834446146/article/details/124947574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [R语言|数据结构(四) 数据框 ———R语言入门到入土系列(五)](https://blog.csdn.net/weixin_42873544/article/details/104826668)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值