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

use*_*672 17 r min dplyr

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

问题:我怎样才能获得正确的值到min()功能的一部分mutate()-基本上,我想分配v3v1具有最小的划分v1v2.这不起作用:

  df <- 
         df %>% mutate(v3=ifelse(v1 !=0, v1/min(v1,v2), 0))
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些非常简单的事情.

tal*_*lat 26

从帮助页面?min:

pmax和pmin将一个或多个向量(或矩阵)作为参数并返回单个向量,给出向量的"并行"最大值(或最小值).

另一方面:

max和min返回其参数中存在的所有值的最大值或最小值

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

df %>% mutate(v3 = (v1 != 0) * v1/pmin(v1,v2))
Run Code Online (Sandbox Code Playgroud)

这里很好的副作用是你可以避免使用ifelse逻辑向量(TRUE/FALSE,然后转换为1/0).

  • 很好的解决方案. (2认同)