2013-05-13 55 views
2

我試圖選擇data.frame中每行最高值的列。舉例來說,數據就是這樣設置的。從數據框中的幾列中選擇最大值或相等值

> df <- data.frame(one = c(0:6), two = c(6:0)) 
> df 
    one two 
1 0 6 
2 1 5 
3 2 4 
4 3 3 
5 4 2 
6 5 1 
7 6 0 

然後,我想根據這些行設置另一列。數據框看起來像這樣。

> df 
    one two rank 
1 0 6 2 
2 1 5 2 
3 2 4 2 
4 3 3 3 
5 4 2 1 
6 5 1 1 
7 6 0 1 

我想有某種方式,我可以在這裏使用plyr或sapply但它躲避我的時刻。

+0

你能詳細說明你如何得到結果嗎? – 2013-05-13 18:02:35

+0

我希望能夠以某種方式生成排名欄。例如,如果df $ one> df $ 2,df $ rank將等於1,df $ 2> df $ 1,df $ rank < - 2,並且df $ one == df $ 2 < - 3.但是我想要有比這更復雜的一組規則,例如如果有三列,我檢查是否存在完全相等(一個==兩個==三)等等。 – raynach 2013-05-13 18:06:54

+1

如果一個和兩個是相等的,並且兩者都是大於三?如果兩個和三個是平等的,而不是一個呢?等等等等。我認爲你應該給出一個與你真正想要的東西更接近的例子,否則你很可能會得到許多對待特殊情況的答案/對你而言不夠普遍。 – 2013-05-13 18:11:50

回答

6

有可能是一個更有效的解決方案,但

ranks <- apply(df, 1, which.max) 
ranks[which(df[, 1] == df[, 2])] <- 3 

編輯:適當間隔!

+0

謝謝,我認爲這基本上是我需要的。 – raynach 2013-05-13 18:13:02

+0

'apply'對一個data.frame是否可以避免,應該是。它在內部轉換爲矩陣,對於大數據可能會非常耗時。 – Arun 2013-05-13 18:26:08

+0

嘿,會做的!我假設http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html是一個很好的指南。 – 2013-05-17 04:13:47

相關問題