web-dev-qa-db-ja.com

R:dplyr :: mutate()内でmin()を使用する

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

問題:min()-の一部としてmutate()関数に正しい値を取得するにはどうすればよいですか?基本的に、_v3_ as _v1_をで割って割り当てたいと思います_v1_と_v2_の最小値。これは機能しません:

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

私は本当に単純なものが欠けていると思います。

17
user3375672

?minのヘルプページから:

pmaxとpminは、1つ以上のベクトル(または行列)を引数として取り、ベクトルの「並列」最大値(または最小値)を与える単一のベクトルを返します。

一方:

maxとminは、引数に存在するすべての値の最大値または最小値を返します

したがって、ここではpminを使用します。 dplyrの場合、1つのオプション(上記でコメントしたとおり)は次のようになります。

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

ここでの優れた副作用は、ifelseの使用を回避し、論理ベクトル(TRUE/FALSEは1/0に変換される)を複数使用できることです。

28
talat