library(dplyr)
df <- tibble(
a = rnorm(10),
b = rnorm(10),
c = rnorm(10),
d = rnorm(10)
)
df %>%
arrange(colnames(df) %>% tail(1) %>% desc())
我正在循环遍历一个数据帧列表。每个数据帧中的列不同,每个数据帧的最后一列可能有不同的名称。
我需要按照每个数据帧的最后一列来排列它们。简单情况如上所示代码。
使用arrange_at
和ncol
:
df %>% arrange_at(ncol(.), desc)
由于 arrange_at
将来会被弃用,您也可以使用以下方法:
# option 1
df %>% arrange(desc(.[ncol(.)]))
# option 2
df %>% arrange(across(ncol(.), desc))
df %>%
arrange_at(vars(last(names(.))), desc)
或者指定索引
df %>%
arrange_at(ncol(.), desc)
新的dplyr方式(我猜从1.0.0开始)是使用across(last_col())
:
library(dplyr)
df <- tibble(
a = rnorm(10),
b = rnorm(10),
c = rnorm(10),
d = rnorm(10)
)
df %>%
arrange(across(last_col(), desc))
#> # A tibble: 10 x 4
#> a b c d
#> <dbl> <dbl> <dbl> <dbl>
#> 1 -0.283 0.443 1.30 0.910
#> 2 0.797 -0.0819 -0.936 0.828
#> 3 0.0717 -0.858 -0.355 0.671
#> 4 -1.38 -1.08 -0.472 0.426
#> 5 1.52 1.43 -0.0593 0.249
#> 6 0.827 -1.28 1.86 0.0824
#> 7 -0.448 0.0558 -1.48 -0.143
#> 8 0.377 -0.601 0.238 -0.918
#> 9 0.770 1.93 1.23 -1.43
#> 10 0.0532 -0.0934 -1.14 -2.08
> packageVersion("dplyr")
#> [1] ‘1.0.4’
arrange_at
在dplyr 0.7.0版本已被弃用。现在有什么可行的替代方案? - Wojciech Kulmaarrange_at
仍然是 [tag:dplyr] 的一部分,也仍然有效;但它已被标记为 superseded,这意味着它不再处于活跃开发状态,并且可能会被弃用;无论如何,我已经更新了答案。 - Jaapdf %>% arrange(desc(tail(colnames(.), 1)))
可以这样翻译:将数据框按最后一列降序排列。 - Wojciech Kulma