Reputation: 313
I have a data frame with 348 numeric columns and I would like to put all these columns in ascending order. How to do this? I tried some codes that sorted the first column in ascending order. I want them all in ascending order. Exemple:
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 with the first column in ascending order but I want them all (a1:a6 in ascending order)
Upvotes: 2
Views: 891
Reputation: 1075
Using data.table
should be fast:
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
Note that this is updating by reference, and so there is no need to write something like df <- df %>% ...
in this situation.
Upvotes: 1
Reputation: 6583
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
Upvotes: 1
Reputation: 52329
Use sapply
+ sort
. Using order
on multiple columns, you will not be able to change the row positions of the columns independently, i.e. you'll get an order of priority for columns to be sorted.
sapply(df, sort)
Upvotes: 0