r - 关于所有列,如何对整个数据框进行排序
问题描述
我想对具有多于一列的数据框进行排序。必须对数据框中的所有列进行排序。我有一些名为 的随机数据框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
当我们必须传递所有列但我们对列数及其名称没有任何先验知识时,请建议我如何在这种情况下对数据框进行排序。
解决方案
使用arrange_all
which 将按所有列排列而不指定名称
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 中可以使用order
and来完成do.call
(感谢@thelatemail)
df[do.call(order, df), ]
推荐阅读
- java - JPQL 查询中 DTO 构造函数的问题
- css - 应用于两个相等 DIV 之一的 rotate() 不能完美对齐背景图像
- android - Aapt 添加库资源
- powershell - 当您无法访问 -Extension 时使用 Select-Object 是否合适?
- python - while循环中try和if语句的问题
- plone - 从 Plone 4.3 迁移到 5.1 后不再访问历史视图
- google-cloud-platform - AccessDeniedException: 403 要计费的项目与已关闭的计费帐户相关联
- unicode - 为什么有些字符串看起来一样,但在检查字符串等价时被认为是不相同的?
- bash - 用于 jq 查询的 Bash 变量替换始终返回 null
- parsing - 带有 DFS 的 AST 的退出条件