现在位置: 首页 > R 教程 > 正文

R order() 函数 - 获取排序索引

R 语言实例 R 语言实例

R order() 函数返回排序后各元素在原向量中的索引位置。

与 sort() 返回排好的值不同,order() 返回的是排序的排列(permutation),在数据框排序中非常有用。

order() 函数语法格式如下:

order(x, decreasing = FALSE, na.last = TRUE)

参数说明:

  • x 输入向量(可传入多个向量用于多条件排序)。

  • decreasing 是否降序,默认 FALSE。

  • na.last NA 值位置。

实例

x <- c(50, 20, 30, 10, 40)
names(x) <- c("张三", "李四", "王五", "赵六", "钱七")

# order 返回排序索引
idx <- order(x)
print("排序后的索引:")
print(idx)

# 用索引获取排序后的值和对应的名字
print("按成绩升序:")
print(x[idx])

# sort 直接返回排序值(对比)
print("sort 直接结果:")
print(sort(x))

执行以上代码输出结果为:

[1] "排序后的索引:"
[1] 4 2 3 5 1
[1] "按成绩升序:"
赵六 李四 王五 钱七 张三
  10   20   30   40   50
[1] "sort 直接结果:"
赵六 李四 王五 钱七 张三
  10   20   30   40   50

order() 对数据框排序非常实用:

实例

# 创建数据框
df <- data.frame(
  姓名 = c("张三", "李四", "王五", "赵六", "钱七"),
  年龄 = c(25, 30, 22, 28, 26),
  成绩 = c(88, 92, 76, 85, 90)
)

# 按成绩降序排列
df_sorted <- df[order(df$成绩, decreasing = TRUE), ]
print("按成绩降序排列:")
print(df_sorted)

# 多条件排序:先按年龄,再按成绩
df_sorted2 <- df[order(df$年龄, df$成绩), ]
print("先按年龄再按成绩:")
print(df_sorted2)

执行以上代码输出结果为:

[1] "按成绩降序排列:"
  姓名 年龄 成绩
2 李四   30   92
5 钱七   26   90
1 张三   25   88
4 赵六   28   85
3 王五   22   76
[1] "先按年龄再按成绩:"
  姓名 年龄 成绩
3 王五   22   76
1 张三   25   88
5 钱七   26   90
4 赵六   28   85
2 李四   30   92

R 语言实例 R 语言实例