首页 > 解决方案 > 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

标签: rdplyr

解决方案


我认为您需要使用此处.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

我很困惑为什么你的方法只是获得第一行!


推荐阅读