我想对一个具有多列的数据框进行排序。必须对数据框中的所有列进行排序。我有一些名为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
当我们必须通过所有列但我们对列数及其名称没有任何先验知识时,请建议我在这种情况下如何对数据框进行排序。
答案 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
可以使用order
和do.call
(感谢@thelatemail)完成基数R中的操作
df[do.call(order, df), ]