Class 05 - 逻辑运算符and,or,not 和 条件语句 if
- 逻辑运算符和条件语句
- 逻辑运算符 and , or , not
- and 运算符“&”
- OR 运算符 “|”
- not 运算符“!
- 案例运用 and , or , not
- subset() 筛选数据
- AND 实例
- OR 实例
- NOT 实例
- 混合使用实例
- 条件语句 if
- if 语句
- else语句
- else if 语句
逻辑运算符和条件语句
逻辑运算符:
R语言中的逻辑运算符可以帮助我们对两个操作数据执行逻辑运算,逻辑运算符可以帮助我们实现复杂的逻辑操作。
- 逻辑与(
and
)运算符(&
)表示只有两个操作数都为真时,整个表达式的值才为真; - 逻辑或(
or
)运算符(|
)表示只要有一个操作数为真时,整个表达式的值就为真; - 逻辑非(
not
)运算符(!
)将操作数的值取反。
了解逻辑运算符对于编写正确的程序至关重要,因为它们是编程中许多问题的关键所在。
条件语句:
条件语句是一种用于控制程序流程的语句,它可以根据某个条件来执行特定的操作,或者在满足特定条件的情况下重复执行某些操作。条件语句通常由以下三个部分组成:
- 条件表达式:用于评估条件是否为真。如果条件为真,则整个条件语句的代码块将被执行。
- 如果条件:用于指定在条件为真时应执行的代码块。如果条件为假,则跳过该代码块。
- 换行符:用于分隔条件语句的不同部分。
使用条件语句可以帮助程序员根据条件来决定执行哪些代码块,从而实现更加灵活和动态的程序设计。条件语句可以用于各种编程任务,例如函数调用、循环、选择等。
逻辑运算符 and , or , not
逻辑运算符返回的值为逻辑数据类型, TRUE
(真) 或 FALSE
(假)。
在编程语言中,逻辑运算符的功能基本上都一样,最起码在Python中的逻辑运算符和R语言的用法和功能是一样的。
逻辑运算符主要有三种类型:
-
AND
(有时在 R 中表示为&
或&&
) 表示只有两个操作数都为真时,整个表达式的值才为真 -
OR
(有时在 R 中表示为|
或||
)表示只要有一个操作数为真时,整个表达式的值就为真 -
NOT
(!
) 将操作数的值取反
下面我们逐个来了解逻辑运算符
and 运算符“&”
AND
运算符采用两个逻辑值。仅当两个单独的值均为 TRUE 时,它才返回 TRUE。这意味着 TRUE & TRUE
的计算结果为 TRUE
。然而,FALSE & TRUE
、TRUE & FALSE
和 FALSE &FALSE
的评估结果都是 FALSE
。
如果我们在 R 中运行相应的代码,则会得到以下结果:
> TRUE & TRUE
[1] TRUE
> TRUE & FALSE
[1] FALSE
> FALSE & TRUE
[1] FALSE
> FALSE & FALSE
[1] FALSE
举个例子:
如果我们要检查一个变量值是否比5
大比10
小。这时后我们就可以使用and
来检查。
我们先设置一个变量x
值为6
x <- 6
然后我们再设置检查x
是否大于5
但小于10
,可以使用x>5
和x<10
,作为and
语句表达式的值。
x > 5 & x < 10
运行函数时,R 返回结果 TRUE
。如下图
运行步骤:
- 第一步,
x > 5
的计算结果为TRUE
,因为6
大于5
。 - 第二步,
x < 10
也将计算为TRUE
,因为6
小于10
。 - 因此,由于两个值均为
TRUE
,因此and
语句返回的结果为TRUE
。数字6
位于数字5
和10
之间。
下面我们变更一下x
的值,让x的值只满足其中一个表达式为真,这时and
语言返回的结果就为FALSE
。使x
等于16
,则表达式x>5
和x<10
将返的结果为FALSE
。
# 逻辑运算符 and
# 设置一个变量x=6
x <- 16
# 设置逻辑运算语句检查x
x>5 & x<10
# 输出结果为
[1] FALSE
虽然 x > 5
为真(16 > 5),但 x < 10
为假(16 < 10)。
如果 AND
表达式的一部分为 FALSE
,则整个表达式为 FALSE
(TRUE & FALSE = FALSE)。
因此,R 返回结果 FALSE
。
OR 运算符 “|”
OR
运算符 (|
) 的工作方式与 AND
运算符 (&
) 类似。主要区别在于,OR
运算的结果只要一个值为 TRUE
,则整个 OR
运算的计算结果就为 TRUE
。这意味着 TRUE |TRUE
、TRUE |FALSE
,和 FALSE|TRUE
所有计算结果为 TRUE
。当两个值都为 FALSE
时,结果为 FALSE
。
如果用代码演示,则会得到以下结果:
> TRUE | TRUE
[1] TRUE
> TRUE | FALSE
[1] TRUE
> FALSE | TRUE
[1] TRUE
> FALSE | FALSE
[1] FALSE
举个例子:
例如,假设您创建一个等于 9
的变量 y
。要检查 y
是小于 10
还是大于 15
,可以使用以下表达式:
# 逻辑运算符 or
y <- 9
# 检查y的值
y < 10 | y > 15
- 比较结果为
TRUE
(9 小于 10)|FALSE
(9 不大于 15)。 - 由于
OR
表达式只有一个值需要为TRUE
,整个表达式才为TRUE
。 - 因此 R 返回的结果为
TRUE
。
现在,假设y
是 15
。表达式 y < 9 | y > 19
现在计算结果为 FALSE (15 < 9) | FALSE (15 > 19)
。两个比较都是 FALSE
,所以结果是 FALSE
。
# 逻辑运算符 or
y <- 15
# 检查y的值
y < 9 | y > 19
# 输出结果
[1] FALSE
not 运算符“!
NOT
运算符 (!
) 只是否定它所应用的逻辑值。换句话说,!TRUE
的计算结果为 FALSE
,并且 !FALSE
的计算结果为 TRUE
。
换一种说法就是取表达式的反向值,也就是取反。
如果用代码演示,则会得到以下结果:
> !TRUE
[1] FALSE
> !FALSE
[1] TRUE
就像 OR
和 AND
运算符一样,你可以将 NOT
运算符与逻辑运算符结合使用。零被视为 FALSE
,非零数字被视为 TRUE
。NOT
运算符的计算结果为相反的逻辑值。
举个例子:
假设有一个变量x
等于 2
,not
操作的计算结果为 FALSE
,因为它采用与非零数 (TRUE) 相反的逻辑值。
# 逻辑运算符 not
x <- 2
!x
# 输出结果
[1] FALSE
案例运用 and , or , not
前面这些例子是为了让你了解逻辑运算符and
、or
、not
而用简单的数字来演示他们的用法。
但是如何再实际的数据处理中使用这些功能,有可能还没有很清楚,下面我们用一个实际的数据来演示逻辑运算符的用法。
我们使用预加载在 RStudio 中的空气质量数据集。它包含1973年5月至9月纽约每日空气质量测量数据。
数据框有六列:
- Ozone 臭氧(臭氧测量值)
- Solar.R(太阳测量值)
- Wind 风(风力测量值)
- Temp 温度(华氏度温度)
- Month 月份和
- Day 日期 (月份中的第几天)
我们直接在RStudio中输入airquality点击运行就能查看数据集中的数据了。
# 查看airquality数据
airquality
如下图
接下来让我们来看看 AND
、OR
和 NOT
运算符如何来帮助我们处理数据。
subset() 筛选数据
在实际应用中,由于逻辑运算符所计算返回的结果为逻辑值,并不是我们最后需要的结果数据,我们需要把得到的逻辑值映射到数据中,从而实现对数据的筛选。
这时候我们需要用到subset()
函数。
subset( 数据 , 表达式 )
AND 实例
假设我们要找出阳光明媚且风力极大的数据条,那么我们可以将其定义为太阳测量值超过 150,风力的测量值超过 10。
在代码中,你可以将逻辑语句表示为: Solar.R > 150 & Wind > 10
。只有这两个条件都为真的行才满足条件
# 筛选太阳测量值超过 150,风力的测量值超过 10 的数据
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Solar.R > 150 & df$Wind > 10)
在输出结果中我们可以看到Solar.R和Wind两列数据中的值已经被过滤了,结果中的数据都满足了我们设置的筛选条件。
OR 实例
接下来,假设我们要筛选Wind(风力)小于10或者Temp(温度)高于90的数据。
在代码中,你可以将逻辑语句表示为: Wind < 10 | Temp > 90
。只要这两个条件有一个为真就能满足筛选条件。
# 筛选Wind(风力)小于10或者Temp(温度)高于90的数据。
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Wind < 10 | df$Temp > 90)
在数据的筛选结果中我们能够看到,有满足Wind<10
不满足Temp > 90
的,有不满足Wind<10
满足Temp > 90
的,还有两个条件都满足的。
NOT 实例
现在,假设我们只需要不是每月第一天的天气测量值。在R语言中,可以将此逻辑语句表示为 Day != 1
。
# 筛选不是每月第一天的天气测量值。
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Day!=1)
在结果中已经不包含Day=1
的数据了。
混合使用实例
当你需要进行复杂的条件筛选的时候,单独的逻辑运算符是不能够满足需求的,这是可以混合使用逻辑运算符来实现复杂的筛选功能。
假设你想要找出5月份中,风力比较弱Wind < 8
或温度较高Temp>80
的数据
# 筛选5月份中风力 wind > 10 或 温度Temp > 90
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Month==5 & (df$Wind < 8 | df$Temp > 80 ))
tips:
- 在混合使用逻辑运算符的时候,需要注意代码执行的顺序和优先级,在多个条件混合使用的时候需要用()括号来控制条件的执行顺序。
如上面例子条件df$Month==5 & (df$Wind < 8 | df$Temp > 80 )
中通过括号把前面的&和后面的 | 运算区别开执行,机器会先执行括号中的| 然后在执行 &,这样才能实现筛选出我们需要的数据。
如果不加括号df$Month==5 & df$Wind < 8 | df$Temp > 80
这样写条件的话,机器会按照从左到右的顺序先执行&
然后执行|
,所得出来的结果就是 5月份企且风力wind<8
的数据或者温度 ``Temp>80`数据,结果中会包含5月之外的数据。结果如下:
条件语句 if
条件语句是一种声明,如果某个条件成立,则必须发生某个事件。例如,“如果温度高于冰点,那么我会出去散步。如果第一个条件为真(温度高于冰点),则会发生第二个条件(我会去散步)。R 代码中的条件语句具有类似的逻辑。
让我们讨论如何使用三个相关语句在 R 中创建条件语句:
+ if()
+ else()
+ else if()
if 语句
if
语句设置一个条件,如果条件的计算结果为 TRUE
,则执行与 if
语句关联的 R 代码。
在 R 中,将条件的代码放在if
语句的括号内。如果条件为 TRUE
,则必须执行大括号的代码 (expr) 。
请注意,一般第一个个大括号放在其自己的代码行上,第二个大括号放在代码的末尾。
if (条件) {
expr
}
举个例子:
让我们创建一个条件语句:如果 x 大于 0,则 R 将打印出字符串“x 是正数”。
# if语句
x = 3
# if条件判断
if (x > 0) {
print("这个数是正数")
}
由于 x = 3
,因此条件为真 (3 > 0)。因此,当你运行代码时,R 会打印出字符串“这个数是正数”。
如果将x
更改为负数,例如 -2
,则条件将为 FALSE
(-2 > 0)。
如果运行代码,R 将不会执行 print
语句。相反,结果将显示一个空行。
# if语句
x = -2
# if条件判断
if (x > 0) {
print("这个数是正数")
}
else语句
else
语句需要与 if
语句结合使用。以下是R语言中代码的结构:
if (条件) {
expr1
} else {
expr2
}
只要 if
语句的条件不为 TRUE
,就会执行与 else
语句关联的代码。换句话说,如果条件为 TRUE
,则 R 将执行if
语句 (expr1) 中的代码;如果条件不是 TRUE
,则 R 将执行 else
语句 (expr2) 中的代码。
举个例子:
先创建一个等于 9 的变量 x。
x <- 9
然后,让我们设置以下条件:
如果 x 大于 0,R 将打印“这是一个正数”。
如果 x 小于或等于 0,R 将打印“这个数为0或者为负数”。
在我们的代码中,第一个条件 (x > 0) 将是 if 语句的一部分。x 小于或等于 0 的第二个条件隐含在 else 语句中。如果 x > 0,则 R 将打印“这是一个正数”。否则,R 将打印“这个数为0或者为负数”。
# if语句
x <- 9
# if else条件判断
if (x > 0) {
print ("这是一个正数")
} else {
print ("这个数为0或者为负数")
}
由于 9 大于 0,因此 if
语句的条件为真。因此,当您运行代码时,R 会执行if
下的语句打印出“这是一个正数”。
但是,如果使 x 等于 -9,则if
语句的条件不成立(-9 不大于 0)。因此,R 将执行 else
语句中的代码。运行代码时,R 会打印出“这个数为0或者为负数”。
# if语句
x <- -9
# if else条件判断
if (x > 0) {
print ("这是一个正数")
} else {
print ("这个数为0或者为负数")
}
else if 语句
在某些情况下,您可能希望通过添加 else if
语句来进一步自定义条件语句。else if
语句位于 if
语句和 else
语句之间。这是代码结构:
if (条件1) {
expr1
} else if (条件2) {
expr2
} else {
expr3
}
如果满足 if
条件(条件 1),则 R 将执行第一个表达式 (expr1) 中的代码。如果不满足 if 条件,满足 else if
条件(条件 2),则 R 将执行第二个表达式 (expr2) 中的代码。如果这两个条件都不满足,R 将执行第三个表达式 (expr3) 中的代码。
在前面的示例中,仅使用 if
和 else
语句,如果 x 等于 0 或 x 小于零,R 只能打印“这个数为0或者为负数”。假设你希望 R 打印字符串“这个数为零”,你需要使用 else if
语句添加另一个条件。
举个例子:
# if语句
x <- 0
# if else条件判断
if (x < 0) {
print("这是一个负数")
} else if (x == 0) {
print("这个数是0")
} else {
print("这是一个正数")
}
在代码中,第一个条件将是if
语句的一部分,第二个条件将是 else if
语句的一部分,第三个条件将是 else
语句的一部分。
-
如果 x < 0,则 R 将打印“这是一个负数”。
-
如果 x = 0,则 R 将打印“这个数是0”。
-
否则,R 将打印“这是一个正数”。
-
如果使 x 等于 0,R 将首先检查
if
条件 (x < 0),并确定它是FALSE
。然后,R 将评估else if
条件。此条件 x==0 为 TRUE。因此,在这种情况下,R 打印“这个数是0”
好了,逻辑运算符和条件语句就介绍到这里了,希望大家都能多动手去运行代码,多尝试不同的条件来去练习逻辑运算和条件语句,在数据处理或者是编写程序中都会经常用到。