dplyr:过滤data.frame中两列相等的过滤器

Car*_*arl 4 r dplyr

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

mtcars[mtcars$cyl==mtcars$carb,]
Run Code Online (Sandbox Code Playgroud)

使用dplyrfilter这种可以轻松完成

mtcars %>% filter(cyl==carb)
Run Code Online (Sandbox Code Playgroud)

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

mtcars %>% filter_("cyl"=="carb")
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下,它认为"碳水化合物"是要测试的值而不是变量.

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

C8H*_*4O2 6

把整个事情放在引号中:

mtcars %>% filter_("cyl==carb")
Run Code Online (Sandbox Code Playgroud)

或者,正如effel已经建议的那样,这也将起作用:

mtcars %>% filter_(~cyl==carb)
Run Code Online (Sandbox Code Playgroud)

  • 我认为重点是帮助函数`f < - function(col1,col2)mtcars%>%filter_(paste0(col1,"==",col2))` (2认同)

eff*_*fel 5

这里还有更多相关内容。

\n\n
\n

最好使用公式,因为公式捕获要计算的表达式以及应计算它的环境。如果表达式是数据框中的变量和本地环境中的对象的混合,这一点很重要

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

或者:

\n\n
\n

可以通过三种方式引用 dplyr 理解的输入:\n 使用公式,~ mean(mpg). 和quote()quote(mean(mpg))。作为字符串:"mean(mpg)".

\n
\n