【问题标题】:dplyr: filter where two columns in data.frame are equaldplyr:过滤data.frame中两列相等的地方
【发布时间】:2016-03-21 19:11:36
【问题描述】:

在基础 R 中,可以轻松过滤到两列相等的行,如下所示:

mtcars[mtcars$cyl==mtcars$carb,]

使用dplyr的filter可以轻松完成

mtcars %>% filter(cyl==carb)

但如果我正在使用此代码编写函数,我想使用filter_,但此代码不起作用

mtcars %>% filter_("cyl"=="carb")

因为在这种情况下,它认为“carb”是一个要测试的值而不是一个变量。

我的问题是如何使用filter_ 比较 data.frame 中的两个变量?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    用引号括起来:

    mtcars %>% filter_("cyl==carb")
    

    或者,正如 effel 已经建议的那样,这也可以:

    mtcars %>% filter_(~cyl==carb)
    

    【讨论】:

    • 我认为重点是帮助一个函数f <- function(col1, col2) mtcars %>% filter_(paste0(col1,"==", col2))
    • @PierreLafortune 对,或 paste(col1,col2, sep="==")
    【解决方案2】:

    here 有更多内容。

    最好使用公式,因为公式同时包含 要评估的表达式,以及它应该是的环境 评估。如果表达式是混合的,这很重要 数据框中的变量和本地环境中的对象

    library(dplyr)
    
    airquality %>%
      filter_(~Month == Day)
    airquality %>% filter_(~Month == Day)
    #   Ozone Solar.R Wind Temp Month Day
    # 1    NA      NA 14.3   56     5   5
    # 2    NA     264 14.3   79     6   6
    # 3    77     276  5.1   88     7   7
    # 4    89     229 10.3   90     8   8
    # 5    21     230 10.9   75     9   9
    

    或者:

    dplyr 可以通过三种方式引用输入: 使用公式~ mean(mpg)。与quote()、quote(mean(mpg))。作为字符串:"mean(mpg)"。

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 2022-01-02
      • 2020-08-08
      • 1970-01-01
      • 2020-04-17
      • 2021-06-16
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      相关资源
      最近更新 更多