2013-09-25 22 views
4

我想子集一個數據框(df),以便僅包含列1到10中每行的最大值以及列柱。子集數據框爲了包含每行的最大值和列名稱

例如數據框:

0  1  2  3  4 
    0.01 0.12 0.41 0.11 0.11 
    0.13 0.12 0.33 0.14 0.07 
    0.02 0.20 0.11 0.27 0.17 
    0.11 0.33 0.04 0.09 0.24 
    0.08 0.07 0.04 0.05 0.58 

目前我使用的是這樣的:

new_df[] <- apply(df[, 1:4], 1, max) #get the max value of current row 
new_df<- subset(new_df, select = c(1)) #keep only one column 

我得到這個:

0.41  
0.33 
0.27 
0.33 
0.58 

,但我不能讓列名其中的最大值來自。

期望的結果:

2 0.41  
    2 0.33 
    3 0.27 
    1 0.33 
    4 0.58 

在此先感謝您的幫助。

回答

3

試試這個

> t(apply(df, 1, function(x) c(which.max(x)-1, max(x)))) 
    [,1] [,2] 
[1,] 2 0.41 
[2,] 2 0.33 
[3,] 3 0.27 
[4,] 1 0.33 
[5,] 4 0.58 

另一種選擇:

> t(apply(df, 1, function(x) as.numeric(c(names(which.max(x)), max(x))))) 
    [,1] [,2] 
[1,] 2 0.41 
[2,] 2 0.33 
[3,] 3 0.27 
[4,] 1 0.33 
[5,] 4 0.58 

正如迪文建議,另一種選擇是:

t(apply(df, 1, function(x) as.numeric(c(names(x)[which.max(x)], max(x))))) 
+6

其他(可以說是更好)的方式來獲得列名: '名稱(X)[which.max(X)]' –

相關問題