2011-11-12 2 views
1

まずを見つける、私は以下のようなデータフレームを作成しました:ペアワイズ(パラレル)最小

age=18:29 
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5) 
height1=c(71.1,75,77.1,73.2,77.8,73.7,78.9,87.1,86.2,85.8,82.8,83.5) 
village=data.frame(age=age,height=height,height1=height1) 

さて、私はそれぞれのあたり短い人の高さをとり、データフレーム内の4番目の列を作成したいです行、例えば行1 76.1対71.1は71.1を返します。

私はこのコードでこれをやってみました:

village=transform(village, shorter=min(height,height1)) 

そして、私は奇妙な結果を得ました。

It gives me the absolute smallest height in BOTH columns

どのように私は私の行ごとに低い値を与えるために、この機能を変更することができます:それは私の両方の列での絶対最小値を与えますか?

答えて

12

min関数はベクトル全体を調べます。あなたが望んだのはpmin

> village$ageminht <- with(village, pmin(height, height1)) 
> village$ageminht 
[1] 71.1 75.0 77.1 73.2 77.8 73.7 78.9 81.1 81.2 81.8 82.8 83.5 
+0

ありがとうございます。 'with'関数と 'transform'関数の違いは何ですか?つまり、どちらを使用するのですか? – AME

+2

'within'関数は' with'よりも 'transform'に似ています。 'with'は結果が返される環境を提供しますが、' < - '(代入)と結合されない限り永続的な効果はありません。 –

+0

私はまだ '〜で'の中ではあまり価値がないと思っています。 'within'はオブジェクト内で実際の変更を行いません。データフレーム全体と同じ大きさの値しか返さないので、依然として' < - 'で代入を行う必要があります –