如何在不考虑行顺序的情况下按降序对 df 的每一列进行排序?

时间:2021-02-16 02:11:20

标签: r

无论行中的数据如何,我都试图按降序或升序对数据进行排序。我在下面做了一个虚拟示例:

A <- c(9,9,5,4,6,3,2,NA)
B <- c(9,5,3,4,1,4,NA,NA)
C <- c(1,4,5,6,7,4,2,4)
base <- data.frame(A,B,C)
df <- base
df$A <- sort(df$A,na.last = T)
df$B <- sort(df$B,na.last = T)
df$C <- sort(df$C)

我们明白了

structure(list(A = c(2, 3, 3, 4, 4, 4, 5, 5, 6, 9, 9, NA), B = c(1, 
2, 3, 4, 4, 4, 5, 5, 9, 10, NA, NA), C = c(1, 2, 3, 4, 4, 4, 
5, 5, 6, 7, 8, 8)), row.names = c(NA, -12L), class = "data.frame")

我想得到类似于 df 的东西,但我的数据有数百列,有没有更简单的方法?

我尝试了 arrange_all() 但结果不是我想要的。

library(tidyverse)
test <- base%>%
        arrange_all()

获得:

  structure(list(A = c(2, 3, 3, 4, 4, 4, 5, 5, 6, 9, 9, NA), B = c(NA, 
    2, 4, 4, 5, 10, 3, 4, 1, 5, 9, NA), C = c(2, 3, 4, 6, 8, 5, 5, 
    8, 7, 4, 1, 4)), class = "data.frame", row.names = c(NA, -12L
    ))

1 个答案:

答案 0 :(得分:1)

您可以单独对每一列进行排序:

library(dplyr)
base %>% mutate(across(.fns = sort, na.last = TRUE))

#   A  B C
#1  2  1 1
#2  3  3 2
#3  4  4 4
#4  5  4 4
#5  6  5 4
#6  9  9 5
#7  9 NA 6
#8 NA NA 7

或在基数 R 中:

base[] <- lapply(base, sort, na.last = TRUE)
相关问题