R语言逻辑运算符 #
一、逻辑运算符概述 #
逻辑运算符用于组合和操作逻辑值(TRUE和FALSE),是条件判断和数据筛选的基础。
二、基本逻辑运算符 #
2.1 逻辑与 (& 和 &&) #
向量化与 (&) #
r
TRUE & TRUE
TRUE & FALSE
FALSE & FALSE
c(TRUE, TRUE, FALSE) & c(TRUE, FALSE, FALSE)
短路与 (&&) #
r
TRUE && TRUE
TRUE && FALSE
FALSE && TRUE
FALSE && FALSE
c(TRUE, FALSE) && c(TRUE, TRUE)
2.2 逻辑或 (| 和 ||) #
向量化或 (|) #
r
TRUE | FALSE
FALSE | FALSE
TRUE | TRUE
c(TRUE, FALSE, FALSE) | c(FALSE, TRUE, FALSE)
短路或 (||) #
r
TRUE || FALSE
FALSE || TRUE
FALSE || FALSE
c(TRUE, FALSE) || c(FALSE, TRUE)
2.3 逻辑非 (!) #
r
!TRUE
!FALSE
!c(TRUE, FALSE, TRUE)
三、运算符区别 #
3.1 & vs && #
| 运算符 | 类型 | 说明 |
|---|---|---|
| & | 向量化 | 对每个元素进行运算 |
| && | 标量 | 只检查第一个元素,短路求值 |
r
x <- c(TRUE, FALSE, TRUE)
y <- c(FALSE, TRUE, FALSE)
x & y
x && y
x <- c(FALSE, TRUE, TRUE)
y <- c(TRUE, FALSE, FALSE)
x && y
3.2 | vs || #
| 运算符 | 类型 | 说明 |
|---|---|---|
| | | 向量化 | 对每个元素进行运算 |
| || | 标量 | 只检查第一个元素,短路求值 |
r
x <- c(TRUE, FALSE, TRUE)
y <- c(FALSE, TRUE, FALSE)
x | y
x || y
x <- c(TRUE, FALSE, FALSE)
y <- c(FALSE, TRUE, TRUE)
x || y
3.3 使用场景 #
r
if (TRUE && FALSE) {
print("条件为真")
}
x <- c(10, 20, 30)
if (all(x > 5) && any(x > 25)) {
print("所有元素大于5,且存在元素大于25")
}
四、逻辑真值表 #
4.1 与运算真值表 #
| A | B | A & B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | FALSE |
| FALSE | TRUE | FALSE |
| FALSE | FALSE | FALSE |
4.2 或运算真值表 #
| A | B | A | B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | TRUE |
| FALSE | TRUE | TRUE |
| FALSE | FALSE | FALSE |
4.3 非运算真值表 #
| A | !A |
|---|---|
| TRUE | FALSE |
| FALSE | TRUE |
五、逻辑函数 #
5.1 all函数 #
r
all(c(TRUE, TRUE, TRUE))
all(c(TRUE, FALSE, TRUE))
all(c(FALSE, FALSE, FALSE))
x <- c(5, 10, 15)
all(x > 0)
all(x > 10)
5.2 any函数 #
r
any(c(TRUE, FALSE, FALSE))
any(c(FALSE, FALSE, FALSE))
any(c(TRUE, TRUE, TRUE))
x <- c(5, 10, 15)
any(x > 10)
any(x > 20)
5.3 which函数 #
r
x <- c(10, 20, 30, 40, 50)
which(x > 25)
which(x == 30)
which(x != 20)
5.4 ifelse函数 #
r
x <- c(10, 20, 30, 40, 50)
ifelse(x > 25, "大", "小")
scores <- c(85, 60, 45, 90, 55)
ifelse(scores >= 60, "及格", "不及格")
六、NA值处理 #
6.1 NA与逻辑运算 #
r
TRUE & NA
FALSE & NA
TRUE | NA
FALSE | NA
!NA
6.2 处理NA #
r
x <- c(TRUE, NA, FALSE)
all(x)
all(x, na.rm = TRUE)
any(x)
any(x, na.rm = TRUE)
6.3 检查NA #
r
x <- c(TRUE, NA, FALSE)
is.na(x)
!is.na(x)
x[!is.na(x)]
七、运算符优先级 #
7.1 优先级顺序 #
从高到低:
| 优先级 | 运算符 |
|---|---|
| 1 | ! |
| 2 | & |
| 3 | | |
| 4 | && |
| 5 | || |
7.2 示例 #
r
TRUE | FALSE & FALSE
(TRUE | FALSE) & FALSE
!TRUE & FALSE
!(TRUE & FALSE)
TRUE && FALSE || TRUE
TRUE && (FALSE || TRUE)
八、组合条件 #
8.1 多条件与 #
r
x <- 25
x > 20 & x < 30
x >= 20 & x <= 30 & x != 25
8.2 多条件或 #
r
x <- 15
x < 10 | x > 20
x == 10 | x == 15 | x == 20
8.3 混合条件 #
r
x <- 25
(x > 20 & x < 30) | x == 100
(x < 10 | x > 20) & x != 25
8.4 排除条件 #
r
x <- c(10, 20, 30, 40, 50)
!(x > 30)
x[!(x > 30)]
九、逻辑索引 #
9.1 向量筛选 #
r
x <- c(10, 20, 30, 40, 50)
x[x > 25]
x[x != 30]
x[x >= 20 & x <= 40]
9.2 数据框筛选 #
r
df <- data.frame(
name = c("张三", "李四", "王五"),
age = c(25, 30, 22),
score = c(85, 90, 78)
)
df[df$age > 24, ]
df[df$score >= 85, ]
df[df$age > 24 & df$score >= 85, ]
十、实践示例 #
10.1 数据验证 #
r
validate_data <- function(age, score) {
valid_age <- age > 0 & age < 120
valid_score <- score >= 0 & score <= 100
if (all(valid_age) && all(valid_score)) {
return(TRUE)
} else {
return(FALSE)
}
}
validate_data(c(25, 30), c(85, 90))
validate_data(c(-5, 30), c(85, 90))
10.2 条件分类 #
r
classify <- function(x) {
ifelse(x < 0, "负数",
ifelse(x == 0, "零", "正数"))
}
classify(c(-5, 0, 10))
10.3 多条件筛选 #
r
data <- data.frame(
name = c("张三", "李四", "王五", "赵六"),
age = c(25, 30, 22, 35),
score = c(85, 90, 78, 88)
)
result <- data[
data$age >= 25 &
data$age <= 30 &
data$score >= 80,
]
print(result)
10.4 异常检测 #
r
detect_outliers <- function(x) {
q <- quantile(x, c(0.25, 0.75))
iqr <- q[2] - q[1]
lower <- q[1] - 1.5 * iqr
upper <- q[2] + 1.5 * iqr
x < lower | x > upper
}
x <- c(1, 2, 3, 4, 5, 100)
detect_outliers(x)
十一、总结 #
本章学习了:
- 基本逻辑运算符:&、|、!
- 向量化与短路运算符的区别
- 逻辑真值表
- 逻辑函数:all、any、which、ifelse
- NA值处理
- 运算符优先级
- 组合条件和逻辑索引
逻辑运算符是条件判断和数据筛选的核心工具,在数据分析中不可或缺!
最后更新:2026-03-27