0Pricing
R Academy · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 sort() 排序向量
  2. 使用 order() 灵活排序
  3. 使用 rank() 对值排名
  4. 按列排序数据框
← 返回 R Academy