R语言order()函数为何没有返回排序后的数据集内容?
order() 函数的实际作用
order() 函数的返回值不是排序后的数据集本身,而是原向量元素按指定顺序排列后的位置索引。
你运行order(lynx)得到的第一个结果是69,意思是lynx数据集里第69个元素是整个序列的最小值,第二个结果22代表第22个元素是第二小的值,后续结果以此类推。
可以用简单小例子验证逻辑:
x <- c(5,2,7,1) order(x) # 输出:4 2 1 3 # 对应:x[4]=1(最小)、x[2]=2(次小)、x[1]=5、x[3]=7(最大)
实现数据集升序排序的两种方案
方案1:配合索引使用order()
用order()返回的索引对原数据集取子集,就能得到排序后的结果:
# 升序排列 sorted_lynx <- lynx[order(lynx)] print(sorted_lynx) # 如果需要降序排列,添加decreasing参数即可 sorted_lynx_desc <- lynx[order(lynx, decreasing = TRUE)]
习题提示用order()的原因是它的适用场景更灵活:如果要对数据框按某一列排序、同时其他列保持行对应关系,用order()就可以直接实现,比如df[order(df$age),]就能把整个数据框按age列升序排列,这是单纯的单向量排序函数做不到的。
方案2:直接使用sort()函数
如果只是需要得到单向量的排序结果,更简单的方法是直接调用sort()函数,它会直接返回排序后的向量:
sorted_lynx <- sort(lynx) print(sorted_lynx)
内容的提问来源于stack exchange,提问作者NotQuiteSo1337
相关产品推荐
相关产品推荐

