R order() 函数 - 获取排序索引
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))
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)
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 语言实例