R:在 dplyr::mutate() 内使用 min()

R: use min() within dplyr::mutate()

require(plyr)
require(dplyr)    
set.seed(8)
    df <- 
      data.frame(
        v1 = runif(10, -1,1),
        v2 = runif(10, -1,1))

问题: 如何将正确的值作为 mutate() 的一部分输入 min() 函数 - 基本上,我想将 v3 分配为 v1 除以 [=16 中的最小值=] 和 v2。 这不起作用:

  df <- 
         df %>% mutate(v3=ifelse(v1 !=0, v1/min(v1,v2), 0))

我想我错过了一些非常简单的东西。

来自 ?min 上的帮助页面:

pmax and pmin take one or more vectors (or matrices) as arguments and return a single vector giving the ‘parallel’ maxima (or minima) of the vectors.

另一方面:

max and min return the maximum or minimum of all the values present in their arguments

所以你想在这里使用 pmin。使用 dplyr,一个选项 - 如上所述 - 是这样的:

df %>% mutate(v3 = (v1 != 0) * v1/pmin(v1,v2))

这里的好处是您可以避免使用 ifelse,而只是与逻辑向量(TRUE / FALSE,然后转换为 1 / 0)相乘。