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)相乘。
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)相乘。