向量是R语言中最简单也是最常用的数据结构。
向量有两种不同的表现形式:
- 原子向量:只包含一种数据类型;
- 列表向量:包含多种数据类型
原子向量
在上一节教程中,我们学习了数值序列,实际就是原子向量的一种。其他的原子向量还包括:
- 逻辑向量
- 字符向量
- 整数向量
- 复数向量
在这节教程中,我们重点了解一下逻辑向量和字符向量。
逻辑向量
逻辑向量包含的值有:
- TRUE
- FALSE
- NA (表示缺失值)
这些值是逻辑“条件”的结果,我们可以尝试一些简单的条件。
首先,创建一个名为num_vect的数值向量,包含0.5, 55, -10, 6这几个值。
> num_vect <- c(0.5, 55, -10, 6)
再创建一个tf的变量,保存num_vect < 1的值,猜猜tf的结果是怎样的?
> tf <- num_vect < 1
> tf
[1] TRUE FALSE TRUE FALSE
tf就是一个逻辑向量。 上述代码中的num_vect < 1是一个条件,并且tf告诉我们数值向量num_vect的每个对应元素是否满足此条件。
比如num_vect的第一个元素是0.5,明显0.5 < 1是成立的,所以对应的tf的第一个值是TRUE。其他元素则以此类推。
我们可以再试试其他条件,比如num_vect >- 6:
> num_vect >= 6
[1] FALSE TRUE FALSE TRUE
我们可以看到依然是对num_vect中的每个元素进行了是否大于等于6的判断,如果满足条件,则返回TRUE,否则返回FALSE。
如果我们有两个逻辑表达式A和B,我们可以通过一些逻辑操作符来获取某些信息。
A | B(逻辑"或" 又称“联合”):A和B中至少有一个为真,则返回TRUE;A & B(逻辑"与" 又称“交叉”):A和B两个都会真, 则返回TRUE;!A(逻辑"非" ): 如果A本身为FALSE,则返回TRUE,反之亦然。
下面给出一些表达式,可以预测一下结果是什么:
(3 > 5) & (4 == 4)
(TRUE == TRUE) | (TRUE == FALSE)
((111 >= 111) | !(TRUE)) & ((4 + 1) == 5)
答案是FALSE、TRUE、TRUE,最好花费一些时间来尝试这些逻辑运算符的各种组合,直到熟练使用它们。
字符向量
字符向量在R中也很常见。双引号用于区分字符对象,如以下示例所示:
> my_char <- c("My", "name", "is")
> my_char
[1] "My" "name" "is"
每个单词都需要使用双引号括起来,这样R就知道这些单词是字符串。
现在my_char是一个长度为3的字符向量。假设我们想将my_char的元素连接在一起成为一个连续的字符串(即长度为1的字符向量)。这个时候就可以使用paste()函数。
> paste(my_char, collapse = " ")
[1] "My name is"
要注意collapse参数,双引号中间是有一个空格,并不是空的。表示当我们将my_char字符向量的元素连接在一起时,我们希望将它们用单个空格分开。当然也可以指定其他连接符,比如-:
> paste(my_char, collapse = "-")
[1] "My-name-is"
如果要新增(连接)字符串,可以直接使用c()函数:
> my_name <- c(my_char, "R language")
> my_name
[1] "My" "name" "is" "R language"
> paste(my_name, collapse = " ")
[1] "My name is R language"
在上述示例中,我们使用了paste()函数连接单个字符向量的元素。 paste()也可以用于连接多个字符向量的元素。
> paste("Hello", "world!", sep = " ")
[1] "Hello world!"
当连接多个字符串时,分隔符参数使用sep。
对于稍微复杂一点的示例,我们可以连接两个向量,每个向量的长度为3。使用paste()将整数向量1:3与字符向量c("X","Y","X")结合在一起。 这次,使用sep =""在连接的元素之间不留任何空间。
> paste(1:3, c("X", "Y", "Z"), sep = "")
[1] "1X" "2Y" "3Z"
如果我们的向量长度不同,会发生什么? (提示:第一节有提到)
向量会循环使用。
> paste(LETTERS, 1:4, sep = "-")
[1] "A-1" "B-2" "C-3" "D-4" "E-1" "F-2" "G-3" "H-4" "I-1" "J-2" "K-3" "L-4" "M-1" "N-2" "O-3" "P-4" "Q-1" "R-2" "S-3" "T-4" "U-1" "V-2" "W-3" "X-4"
[25] "Y-1" "Z-2"
此外,外面还可以注意到,数值向量1:4被paste()函数强制转为字符向量了。
小结
- 逻辑向量:存储的是布尔值,需要熟练各种逻辑表达式
- 字符向量:注意
paste()分隔符参数sep和collapse的不同使用情况。
本文首发于公众号:柠檬培养师(ID: yantinger90),欢迎关注!
本文介绍了R语言中的原子向量,重点关注逻辑向量和字符向量。逻辑向量包括TRUE、FALSE和NA,通过逻辑运算符进行条件判断;字符向量用双引号定义,可以使用函数进行连接。文章强调了理解和熟练运用逻辑表达式及字符向量连接的重要性。
713

被折叠的 条评论
为什么被折叠?



