dplyr链中条件筛选的正确方法

dplyr链中条件筛选的正确方法,r,dplyr,R,Dplyr,我定义了一个简单的函数,将两列添加在一起,如本例所示: library(tidyverse) set.seed(041019) 看起来它是在试图过滤参数,而不是数据,这显然不是我想要的 您可以在过滤器中放入if语句: Error in if (.) !aboveFifty else { : argument is not interpretable as logical In addition: Warning message: In if (.) !aboveFifty else {

我定义了一个简单的函数,将两列添加在一起,如本例所示:

library(tidyverse)
set.seed(041019)

看起来它是在试图过滤参数,而不是数据,这显然不是我想要的

您可以在
过滤器中放入
if
语句:

Error in if (.) !aboveFifty else { : 
  argument is not interpretable as logical
In addition: Warning message:
In if (.) !aboveFifty else { :
  the condition has length > 1 and only the first element will be used
addXY%
过滤器(如果(大于50)x<50,否则x<100)%>%
变异(z=x+y)
addXY(dat)
x y z
1 28 16 44
2 11 61 72
3 37 24 61
4 29 44 73

Typo,现在编辑。目前还不清楚dat
被导入的位置/内容。您可以将整个语句用大括号括起来,并在
filter()
中使用点来解决这个问题。像
dat%>%{if(!overseverfilten){filter(,x<50)}else{filter(,x nice one)。这很有效。感谢您已经在函数中完成了此筛选操作,您可以向阈值变量添加赋值,然后根据该赋值进行筛选
addXY <- function(dat, aboveFifty = TRUE) {
  datOut -> dat %>%
    if (!aboveFifty) {filter(x < 50)} else {filter(x <= 100)} %>%
    mutate(z = x + y)
    return(datOut)
}
addXY(dat, aboveFifty = FALSE)
Error in if (.) !aboveFifty else { : 
  argument is not interpretable as logical
In addition: Warning message:
In if (.) !aboveFifty else { :
  the condition has length > 1 and only the first element will be used
addXY <- function(x, aboveFifty = T) x %>%
  filter(if (aboveFifty) x < 50 else x < 100) %>%
  mutate(z = x + y)

addXY(dat)

   x  y  z
1 28 16 44
2 11 61 72
3 37 24 61
4 29 44 73