逻辑索引
本课属于 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 50R 只保留逻辑向量中值为 TRUE 的元素。这种方法比编写循环来筛选数据简洁得多。你可以使用逻辑运算符组合条件:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])输出:
[1] 20 30 40逻辑索引是 R 中最强大的数据处理功能之一,可以让你用简单易读的表达式筛选数据集。
挑战
简单你将收到两行输入:
- 以逗号分隔的数字列表(例如,
15,42,8,67,23,91,34,12,56) - 两个以逗号分隔、表示一个范围的阈值(例如,
20,60)
使用逻辑索引:
- 根据以逗号分隔的数字创建一个数值向量
- 提取并打印所有小于第一个阈值(下界)的元素
- 提取并打印所有大于第二个阈值(上界)的元素
- 提取并打印所有在范围内的元素(大于或等于第一个阈值,并且小于或等于第二个阈值)
例如,如果输入为:
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. 用逻辑索引和 & 运算符提取范围内的元素(包含边界值)并打印这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: R 在线编译器