【问题标题】:Passing NSE to dplyr's filter将 NSE 传递给 dplyr 的过滤器
【发布时间】:2016-08-31 19:37:25
【问题描述】:
library(dplyr)

specials <- names(mtcars)[1:2]
specials[1]

i=1

设置完成, 这行得通...

mtcars %>%
  select_(specials[i], ~gear, ~carb)

为什么 nse 添加过滤器失败?

mtcars %>%
  select_(specials[i], ~gear, ~carb) %>%
  filter_(specials[i] == 21.4)

【问题讨论】:

    标签: r dplyr nse


    【解决方案1】:

    我们可能需要interp

    library(lazyeval)
    library(dplyr)
    mtcars %>%
          select_(specials[i], ~gear, ~carb) %>% 
          filter_(interp(~nm == 21.4, nm = as.name(specials[1])))
    #  mpg gear carb
    #1 21.4    3    1
    #2 21.4    4    2
    

    【讨论】:

    • 为了详细说明答案,special[i] 的值为“mpg”,"mpg" == 21.4 不正确。因此,失败。 filter_ 计算布尔表达式,因此我们必须构造一个使用 mpg 作为列名的表达式。 lazyeval::interp 提供了一种将值插入表达式的方法。
    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2018-02-19
    • 2016-12-11
    • 2016-04-17
    • 2021-12-02
    相关资源
    最近更新 更多