在dplyr链中有条件过滤的正确方法

时间:2019-04-10 22:17:33

标签: r dplyr

a

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

for b_row_index in range(1, len(b)): # Excluding the headers
    b_name = b[b_row_index][0]
    for a_row in a[1:]:
        if b_name in a_row[0]:
            b[b_row_index][1] = a_row[1]
            break
    else:
        b[b_row_index][1] = ''

说我想向此函数添加一个二进制参数,并使用它在dplyr链中有条件地进行过滤。我将如何正确做到这一点。我试过了,但是没用:

library(tidyverse)
set.seed(041019)

失败,并显示错误消息:

# data    
dat <- data.frame("x" = sample(1:100, 10), "y" = sample(1:100, 10))

# define function
addXY <- function(dat) {
 datOut <- dat %>%
 mutate(z = x + y)
 return(datOut)
}

addXY(dat)

    x  y   z
1  80 30 110
2  28 16  44
3  11 61  72
4  37 24  61
5  29 44  73
6  62 33  95
7  94 50 144
8  59 59 118
9  88 39 127
10 65 78 143

似乎正在尝试过滤参数而不是数据,这显然不是我想要的。

1 个答案:

答案 0 :(得分:2)

您可以在if中放入filter语句:

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