在基数R中,可以轻松过滤到两列等于的行,如下所示:
mtcars[mtcars$cyl==mtcars$carb,]
Run Code Online (Sandbox Code Playgroud)
使用dplyr的filter这种可以轻松完成
mtcars %>% filter(cyl==carb)
Run Code Online (Sandbox Code Playgroud)
但是,如果我正在使用此代码编写函数,我想使用filter_,但此代码不起作用
mtcars %>% filter_("cyl"=="carb")
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,它认为"碳水化合物"是要测试的值而不是变量.
我的问题是你如何filter_用来比较data.frame中的两个变量?
把整个事情放在引号中:
mtcars %>% filter_("cyl==carb")
Run Code Online (Sandbox Code Playgroud)
或者,正如effel已经建议的那样,这也将起作用:
mtcars %>% filter_(~cyl==carb)
Run Code Online (Sandbox Code Playgroud)
这里还有更多相关内容。
\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\nRun Code Online (Sandbox Code Playgroud)\n\n或者:
\n\n\n\n可以通过三种方式引用 dplyr 理解的输入:\n 使用公式,
\n~ mean(mpg). 和quote(),quote(mean(mpg))。作为字符串:"mean(mpg)".