r语言 - dplyr ' slice_max '插值不工作



给定data.frame:

library(tidyverse)
set.seed(0)
df <- tibble(A = 1:10, B = rnorm(10), C = rbinom(10,2,0.6))
var <- "B"

我想通过var中变量的最大值来过滤数据帧。从逻辑上讲,我会这样做:

df %>%
slice_max({{ var }}, n = 5)
#> # A tibble: 1 × 3
#>       A     B     C
#>   <int> <dbl> <int>
#> 1     1  1.26     1
df %>%
slice_max(!! var, n = 5)
#> # A tibble: 1 × 3
#>       A     B     C
#>   <int> <dbl> <int>
#> 1     1  1.26     1

但是这两个插值都不起作用…我错过了什么?

期望输出与

相同:
df %>%
slice_max(B, n = 5)
#> # A tibble: 5 × 3
#>       A     B     C
#>   <int> <dbl> <int>
#> 1    10 2.40      0
#> 2     3 1.33      2
#> 3     4 1.27      1
#> 4     1 1.26      1
#> 5     5 0.415     2

我认为您需要使用此处概述的较新的.data版本:

df %>%
slice_max(.data[[var]] , n = 5)
#> # A tibble: 5 × 3
#>       A     B     C
#>   <int> <dbl> <int>
#> 1    10 2.40      0
#> 2     3 1.33      2
#> 3     4 1.27      1
#> 4     1 1.26      1
#> 5     5 0.415     2

我很困惑为什么你的方法是得到第一行只有虽然!

我们可以转换为sym并求值(!!)

library(dplyr)
df %>%
slice_max(!! rlang::sym(var), n = 5)

与产出

# A tibble: 5 × 3
A     B     C
<int> <dbl> <int>
1    10 2.40      0
2     3 1.33      2
3     4 1.27      1
4     1 1.26      1
5     5 0.415     2

最新更新