2012-01-24 9 views
8

私は、65個の変数を持つデータフレームを扱っています。最初の変数は人をカタログ化し、次の64個の変数は64人の場所のそれぞれからの人物の地理的距離を示します。 Rを使って、64人の場所のうちの1人に最短距離をカタログする新しい変数を作成したいと思います。データフレーム内の行の最小値を取得する

たとえば、人Xが場所から35,50,79,100,450マイル離れている場合、これは最短距離であるため、新しい変数に35を自動的に割り当てるようにします。 これに関するお手伝いがあれば幸いです。ありがとう。

+0

df $ newvariable = apply(df [、2:65]、1、min) – aatrujillob

答えて

8
df <- data.frame(let=letters[1:25], d1=sample(1:25,25), d2=sample(1:25,25), d3=sample(1:25,25)) 

df$shortest <- apply(df[,2:4],1,min) 

2行目は、関数minを各行に適用し、それをmy data.frame dfの新しい列に割り当てます。 2行目の処理の詳細については、?applyを参照してください。最初の列、または距離のない列をスキップするように注意してください。

apply(df,1,min)は、文字列の「最小」を見つけて以来、完全に異なる答えを示しています。

> min(2:10) 
[1] 2 
> min(as.character(2:10)) 
[1] "10" 
4

私はこのアプローチを適用してアプローチしますが、変換やその他のアプローチが有効です。

#fake data set 
ID=LETTERS[1:5], distance=matrixsample(
DF <- as.data.frame(matrix(sample(1:100, rep=T, 100), 5, 20)) 
DF <- data.frame(ID=LETTERS[1:5], DF) 

#solution 
DF$newvar <- apply(DF[,-1], 1, min) 
12

あるいは、ジャスティンの例を使用して:

df$shortest <- do.call(pmin,df[-1]) 

はそれほど使用していない(?pmin?do.callも見て、あなたがリストのインデックスを使用して、データフレームに最初の変数をドロップすることができますことに注意してくださいカンマはまったくありません。?Extractも参照してください。

関連する問題