繁体   English   中英

如何按升序对r中数据框的所有列进行排序?

[英]how to sort in ascending order all columns of a data frame in r?

我有一个包含 348 个数字列的数据框,我想将所有这些列按升序排列。 这个怎么做? 我尝试了一些按升序对第一列进行排序的代码。 我希望它们都按升序排列。 示例:

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

df2 = df[with(df, order(a1,a2,a3,a4,a5,a6)), ]
head(df2)

df2,第一列按升序排列,但我想要它们全部(a1:a6 按升序排列)

library(tidyverse)

df %>% 
  mutate(across(everything(), sort))

# A tibble: 50 x 6
      a1    a2    a3    a4    a5    a6
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  2.30  5.31  3.28  8.25  8.62  11.2
 2  3.39 15.6   3.70 16.4  21.0   12.7
 3  7.11 24.3   8.29 17.9  22.1   17.4
 4 10.8  24.3   9.09 25.3  25.8   22.0
 5 11.9  40.2   9.86 25.4  28.7   24.3
 6 13.7  40.6  11.3  25.7  31.3   37.1
 7 21.4  41.6  12.3  29.6  39.1   38.1
 8 27.1  56.3  12.8  39.3  40.5   45.5
 9 28.7  60.1  14.3  39.8  46.2   63.8
10 29.1  62.1  15.4  50.2  46.8   72.8
# ... with 40 more rows
# i Use `print(n = ...)` to see more rows

使用data.table应该很快:

library(data.table)
setDT(df)

df[, names(df) := lapply(.SD, sort)]
head(df)
          a1        a2        a3       a4       a5        a6
1: 0.1877075  6.731233  1.354166 12.82542 15.43206  8.385348
2: 0.3087580 14.567764  7.271257 14.18342 18.84559 20.998163
3: 1.3518180 15.943932  8.163164 15.69317 20.46418 28.797276
4: 6.9881726 19.086500 11.085330 18.38545 29.16079 30.808385
5: 7.5015324 19.158892 12.257267 18.86634 32.27948 32.997170
6: 7.6574802 21.143694 14.037592 20.07155 37.85144 49.052889

请注意,这是通过引用更新的,因此在这种情况下无需编写类似df <- df %>%...的内容。

使用sapply + sort 在多列上使用order ,您将无法独立更改列的行位置,即您将获得要排序的列的优先顺序。

sapply(df, sort)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM