r - 使用 dplyr 创建具有多个参数的函数

标签 r dplyr nse

我正在努力在自己的函数中使用 dplyr 函数。我更接近理解了,但仍然缺乏充分的理解。 这里我有包含 typeD10 变量的 df

df <- data.frame(type = c("KL", "KL", "A", "A", "B", "B", "9999", "-1"), 
                 D10 = rnorm(8, 3, 4))

我想编写一个函数,如果 type == "KL",则在新列中将返回 M"-1" 如果类型 %in% c(9999, -1) 并且对于所有其他情况将返回 K。我希望在启动函数时可以更改 9999, -1, KL 的值。

我的尝试以如下所示的函数结束:

klme <- function(dat, met, minusy = c(-1, 9999), Sortnr, type){
  mutate_call <- lazyeval::interp(~ifelse(a %in% met, "M", ifelse(a %in% minusy, "-1", "K")), a = as.name(Sortnr))
  dat %>% mutate_(.dots = setNames(list(mutate_call), type))
}

klme(df, c("KL"), minusy = c(-1, 9999), "Sortnr", "typ")

typ 列中仅返回 K,而我想获得如下输出:

  type        D10 type.1
1   KL -5.3210620      M
2   KL  4.4832414      M
3    A -5.3979886      K
4    A  2.7933964      K
5    B -0.9602293      K
6    B  4.5097305      K
7 9999 -3.9650796     -1
8   -1  5.2700609     -1

最佳答案

我相信您正在寻找这个,请记住您需要interp所有变量值(@wici 也是正确的,您对klme的调用不应该有Sortnr 因为它不是 df 中的列):

df <- data.frame(type = c("KL", "KL", "A", "A", "B", "B", "9999", "-1"), 
                 D10 = rnorm(8, 3, 4))

klme <- function(dat, met, minusy = c(-1, 9999), Sortnr, type){
  mutate_call <- lazyeval::interp(~ifelse(a %in% y, "M", 
                                          ifelse(a %in% z, "-1", "K")),
                                  a = as.name(Sortnr),
                                  y = met,
                                  z = minusy)
  dat %>% mutate_(.dots = setNames(list(mutate_call), type))
}

klme(df, c("KL"), minusy = c('-1', '9999'), "type", "typ")
  type        D10 typ
1   KL  6.4760905   M
2   KL  7.5196368   M
3    A  2.2588101   K
4    A  1.4910878   K
5    B -0.3357310   K
6    B  1.9693856   K
7 9999 -0.3820483  -1
8   -1  4.5595150  -1

关于r - 使用 dplyr 创建具有多个参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40758345/

相关文章:

r - 如何排列从 for 循环创建的 ggplots

r - group_by() 到 fill() 没有按预期工作

r - dplyr 中的条件求和(类似于 "refer to the just updated value in another row"- 就像在 Excel 中一样)

r - 在SE情况下如何使用nesting_

r - 在编程中使用 dplyr mutate()

r - 在函数中使用 dplyr,非标准评估

r - 使用首先处理的年份创建新变量

r - 在R中的ggarrange中添加两个标签

r - 在 dplyr 过滤器行中 NA 数量大于 1

r - 只保留重复一次的行