You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中对数据框的全部列执行升序排序?

解决每列独立升序排序的问题

你之前用order()的方式是按列优先级对行进行排序——先按a1升序排所有行,a1相同的行再按a2升序,以此类推,所以只有a1会是全局严格升序,其他列仅在对应分组内有序,不是你要的每列独立升序效果。

要实现所有列各自单独升序(每列数值从低到高排列,不保留原行的对应关系),可以用以下两种方法:

方法一:基础R实现

用apply()函数对每列单独执行排序,再转回dataframe:

# 生成示例数据(你的原代码)
a1 = runif(n = 50, min = 0.1, max = 120)
a2 = runif(n = 50, min = 5, max = 151)
a3 = runif(n = 50, min = 1, max = 100)
a4 = runif(n = 50, min = 6, max = 180)
a5 = runif(n = 50, min = 6, max = 183)
a6 = runif(n = 50, min = 6, max = 254)
df = data.frame(a1,a2,a3,a4,a5,a6)

# 每列独立升序排序
df_sorted <- as.data.frame(apply(df, 2, sort))

# 查看结果
head(df_sorted)
  • apply(df, 2, sort):2表示按列操作,对每列调用sort()函数(默认升序)
  • as.data.frame():把apply返回的矩阵转回dataframe格式,保持原列名

方法二:tidyverse(dplyr)实现

如果你习惯用tidyverse语法,用across()对所有列应用排序:

library(dplyr)

df_sorted <- df %>% 
  mutate(across(everything(), sort))

head(df_sorted)
  • across(everything()):选中dataframe的所有列
  • sort:对每列执行升序排序(如果要降序可以用~sort(., decreasing = TRUE))

这两种方法都能直接处理你348列的dataframe,不需要手动列出所有列名。

内容的提问来源于stack exchange,提问作者Marcel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:00:57