2012-01-24 73 views
8

我正在處理一個有65個變量的數據幀。第一個變量爲一個人編目,而接下來的64個變量表示該人距離64個位置中的每一個的地理距離。使用R,我想創建一個新變量,將每個人的最短距離編目到64個位置中的一個。例如:如果人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) 

第二行將函數min應用於每一行並將其分配給我的data.frame df中的新列。請參閱?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