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
似乎正在尝试过滤参数而不是数据,这显然不是我想要的。
答案 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