r - 在多列混合 asc & desc 顺序上使用功能排列/交叉
问题描述
我想订购iris
如下,但如果可能的话,使用单个语句使用变量名:
# Result I want but using variable names
x1 <- iris %>% arrange(Species, desc(Sepal.Length))
# Working solution (with multiple statements)
x2 <- iris %>% arrange(across(any_of("Sepal.Length"), desc)) %>% arrange(across(any_of("Species")))
# My try : not working (one statement)
asc <- function(x) {return(x)}
x3 <- iris %>% arrange(across(any_of(c("Species", "Sepal.Length")), .fns = list(asc, desc)))
identical(x1, x2)
identical(x1, x3)
据我了解,当您使用时,arrange(across(.cols, .fns))
您可以使用desc
,但它会影响您的所有变量......
解决方案
尝试使用.data
:
x2 <- iris %>% arrange(.data[["Species"]], desc(.data[["Sepal.Length"]]))
identical(x1, x2)
## [1] TRUE
这也可以像这样在基础 R 中完成:
o <- order(iris[["Species"]], -xtfrm(iris[["Sepal.Length"]]))
x3 <- iris[o, ]
all.equal(x1, x3, check.attributes = FALSE)
## [1] TRUE
或者像这样在sql中:
library(sqldf)
v1 <- "Species"
v2 <- "Sepal.Length"
x4 <- fn$sqldf("select * from iris order by [$v1], [$v2] desc")
all.equal(x1, x4, check.attributes = FALSE)
## [1] TRUE
推荐阅读
- c++ - 在存在错误代码的情况下输出参数与 NRVO
- mysql - CentOS 7 - MySQL 5.7 重新安装损坏数据
- android - Gitlab CI UI 测试
- c# - CS0123 - 'TextChanged' 没有重载匹配委托 'EventHandler'
- ios - PDFPage.attributedString 返回错误的字体
- javascript - Rails 应用程序中的 Jquery + Ajax 使提交按钮变得不可见
- r - Integrate-Function R:match.fun(f) 中的错误
- python - 如何强迫自己更优雅地编码?
- c# - 多个列表中的最高分
- python - 带有 Pandas 数据的叶标记。为什么没有标记出现?