关于所有列,如何对整个数据框进行排序

时间:2019-06-03 02:19:32

标签: r dataframe dplyr

我想对一个具有多列的数据框进行排序。必须对数据框中的所有列进行排序。我有一些名为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

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

1 个答案:

答案 0 :(得分:3)

使用arrange_all,它将按所有列排列而不指定名称

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

可以使用orderdo.call(感谢@thelatemail)完成基数R中的操作

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