使用 sort() 排序向量
按升序或降序排列数值向量和字符向量
使用 sort() 排序向量 是 CoddyKit 上的免费 R Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。
sort() 的作用是什么
sort() 函数默认按升序排列向量中的元素。它适用于数值型、字符型和逻辑型向量,并返回一个新的排序向量,不会修改原向量。
scores <- c(42, 7, 95, 13, 67, 31)
sorted_scores <- sort(scores)
print(sorted_scores)按降序排序
将 decreasing = TRUE 传给 sort() 即可反转排序顺序。这对于从高到低排列结果很有用,例如排列排行榜分数或销售数据。
prices <- c(19.99, 5.49, 89.00, 34.50, 12.75)
sort(prices, decreasing = TRUE)对字符向量排序
字符向量按字典序(字母顺序)排序。R 使用系统区域设置来确定排序顺序,因此根据区域设置的不同,大写字母可能会排在小写字母之前。
fruits <- c('banana', 'Apple', 'cherry', 'apricot', 'Blueberry')
sort(fruits)区分大小写的排序行为
在大多数区域设置中,大写字母会排在小写字母之前。若要不区分大小写地排序,请先使用 tolower() 或 toupper() 将字符转换为统一的大小写。
words <- c('Zebra', 'apple', 'Mango', 'banana')
# Case-sensitive (uppercase first)
sort(words)
# Case-insensitive approach
words[order(tolower(words))]使用 na.last 处理 NA 值
默认情况下,sort() 会移除 NA 值。使用 na.last = TRUE 可将 NAs 放在末尾,使用 na.last = FALSE 可将它们放在开头。此参数控制缺失值在结果中的位置。
data <- c(5, NA, 2, NA, 8, 1)
# Default: NAs removed
sort(data)
# NAs at end
sort(data, na.last = TRUE)
# NAs at beginning
sort(data, na.last = FALSE)对逻辑向量排序
按升序排序时,逻辑向量会将 FALSE(0)排在 TRUE(1)之前。当您希望将 TRUE/FALSE 值分组到一起时,这会很有用。
flags <- c(TRUE, FALSE, TRUE, FALSE, FALSE, TRUE)
sort(flags)
sort(flags, decreasing = TRUE)sort() 保留向量类型
sort() 始终返回与输入相同类型的向量。对整数排序会返回整数,对双精度数排序会返回双精度数,对字符排序会返回字符。类别属性也会保留。
int_vec <- c(5L, 2L, 8L, 1L, 4L)
result <- sort(int_vec)
print(result)
print(class(result))
print(typeof(result))使用 sort.int() 对整数排序
sort.int() 是专门用于对整数型或双精度型向量排序的底层函数。它接受与 sort() 相同的参数,但对于大型数值向量来说略快,因为它跳过了部分方法分派开销。
big_vec <- c(100L, 3L, 77L, 22L, 55L, 9L)
# sort.int works like sort for numeric/integer vectors
result <- sort.int(big_vec, decreasing = FALSE)
print(result)原向量不会改变
sort() 有一个重要特性:它不会修改原向量,而是返回一个新的排序向量。如果要保留排序后的顺序,必须将结果赋值给变量。
temps <- c(22.5, 18.0, 30.1, 15.3, 27.8)
sorted_temps <- sort(temps)
cat('Original:', temps, '\n')
cat('Sorted: ', sorted_temps, '\n')同时进行排序和索引
有时您既需要排序后的值,也需要它们在原向量中的位置。请将 sort() 与 which() 结合使用,或使用 order()(下一课介绍),以便在获取排序值的同时取得原始索引。
exam_scores <- c(78, 92, 65, 88, 71)
sorted <- sort(exam_scores)
cat('Sorted scores:', sorted, '\n')
# Find what rank each original score gets
ranks <- rank(exam_scores)
cat('Rank of each student:', ranks, '\n')sort() 的实用模式
一种常见模式是对向量中的唯一值进行排序,或者将 sort() 与 head() 或 tail() 结合使用来获取最大的前 N 个值。
sales <- c(120, 340, 95, 210, 340, 180, 95, 420)
# Unique values in order
sort(unique(sales))
# Top 3 largest
tail(sort(sales), 3)
# Bottom 3 smallest
head(sort(sales), 3)快速检查
使用 sort() 时,哪个参数可以控制 NA 值出现在开头、末尾,还是被删除?
sort() 要点
sort() 的要点:
- 使用
sort(x)按升序排序,使用sort(x, decreasing=TRUE)按降序排序 - 字符向量按字母顺序排序;默认情况下会区分大小写
- 使用
na.last = TRUE/FALSE/NA控制 NA 的位置 sort()不会修改原向量,而是始终返回一个新向量- 使用
tail(sort(x), n)或head(sort(x), n)获取前 N 个或后 N 个值 sort.int()是用于数值型/整数型向量的更快变体
x <- c(3, 1, NA, 5, 2, NA, 4)
cat('Ascending (no NAs):', sort(x), '\n')
cat('Descending (NAs last):', sort(x, decreasing = TRUE, na.last = TRUE), '\n')常见问题解答
「使用 sort() 排序向量」课时是免费的吗?
是的 — 「使用 sort() 排序向量」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。
「使用 sort() 排序向量」这节课中我会学到什么?
按升序或降序排列数值向量和字符向量 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 R Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 sort() 排序向量」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 R Academy 课中编写并运行代码吗?
能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 sort() 排序向量
- 使用 order() 灵活排序
- 使用 rank() 对值排名
- 按列排序数据框