首页 > 解决方案 > 关于所有列,如何对整个数据框进行排序

问题描述

我想对具有多于一列的数据框进行排序。必须对数据框中的所有列进行排序。我有一些名为 的随机数据框dd,如下所示:

  a          b       c         d
SDSGFD   DFJWEFH    DHWKEF   JHVFKSJD
SDSGFD   DFJWEFH    DHWKEF   1JHVFKSJD
SDSGFD   DFJWEFH    ADHWKEF  JHVFKSJD
4SDSGFD  DFJWEFH    DHWKEF   JHVFKSJD
SDSGFD   BDFJWEFH   DHWKEF   JHVFKSJD
SDSGFD   B1DFJWEFH  DHWKEF   JHVFKSJD`

我通过将列名传递给arrange()方法对该数据框进行了排序,如下所示:

arrange(dd, a)它将根据“a”列进行排序。

arrange(dd, a,b)arrange(dd, a,b,c,d)就像我已经传递了所有列来对数据框进行排序一样,它会根据要求进行排序。

但是让我们假设,我们不知道列的数量和它们的名称。我通过传递names()arrange()函数来尝试它;

arrange(dd,names(dd))但它给出了一个错误:

错误:位置 1 的尺寸 (4) 不正确,预期为:6

当我们必须传递所有列但我们对列数及其名称没有任何先验知识时,请建议我如何在这种情况下对数据框进行排序。

标签: rdataframedplyr

解决方案


使用arrange_allwhich 将按所有列排列而不指定名称

library(dplyr)
df %>% arrange_all()

#        a         b       c         d
#1 4SDSGFD   DFJWEFH  DHWKEF  JHVFKSJD
#2  SDSGFD B1DFJWEFH  DHWKEF  JHVFKSJD
#3  SDSGFD  BDFJWEFH  DHWKEF  JHVFKSJD
#4  SDSGFD   DFJWEFH ADHWKEF  JHVFKSJD
#5  SDSGFD   DFJWEFH  DHWKEF 1JHVFKSJD
#6  SDSGFD   DFJWEFH  DHWKEF  JHVFKSJD

arrange当我们在此示例中使用单个列时,它给出相同的顺序

identical(df %>% arrange(a, b, c, d), df %>% arrange_all())
#[1] TRUE

在基础 R 中可以使用orderand来完成do.call(感谢@thelatemail)

df[do.call(order, df), ]

推荐阅读