Menu
CoddyTech

逻辑索引

本课属于 Coddy R 学习旅程的“基础知识”单元。第 68 课,共 78 课。

你可以使用逻辑向量来选择元素,而不必指定确切的位置。这种技术称为逻辑索引,可以根据条件而不是位置筛选向量。

对向量应用比较运算时,R 会返回一个长度相同的逻辑向量:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)

输出:

[1] FALSE FALSE  TRUE  TRUE  TRUE

你可以直接在方括号中使用这个逻辑向量,提取符合条件的元素:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])

输出:

[1] 30 40 50

R 只保留逻辑向量中值为 TRUE 的元素。这种方法比编写循环来筛选数据简洁得多。你可以使用逻辑运算符组合条件:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])

输出:

[1] 20 30 40

逻辑索引是 R 中最强大的数据处理功能之一,可以让你用简单易读的表达式筛选数据集。

challenge icon

挑战

简单

你将收到两行输入:

  1. 以逗号分隔的数字列表(例如,15,42,8,67,23,91,34,12,56)
  2. 两个以逗号分隔、表示一个范围的阈值(例如,20,60)

使用逻辑索引:

  1. 根据以逗号分隔的数字创建一个数值向量
  2. 提取并打印所有小于第一个阈值(下界)的元素
  3. 提取并打印所有大于第二个阈值(上界)的元素
  4. 提取并打印所有在范围内的元素(大于或等于第一个阈值,并且小于或等于第二个阈值)

例如,如果输入为:

5,25,10,45,60,15,80,35,50
20,50

输出应为:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

说明:

  • 小于 20 的元素:5, 10, 15
  • 大于 50 的元素:60, 80
  • 介于 20 和 50 之间(含边界)的元素:25, 45, 35, 50

使用 & 运算符组合范围筛选条件。

亲手试试

# 读取输入
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# 将逗号分隔的数字解析为数值向量
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# 解析阈值
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO:在下方编写代码
# 1. 用逻辑索引提取小于 lower_bound 的元素并打印
# 2. 用逻辑索引提取大于 upper_bound 的元素并打印
# 3. 用逻辑索引和 & 运算符提取范围内的元素(包含边界值)并打印
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: R 在线编译器