2017-04-22 38 views
0

我的代碼如下。它在最小值所在的行和列名稱中查找最小值。我如何修改我的代碼以獲取第2,3,4,5個最小值和各個列名的值?r在數據框的行中找到第二個最小值並獲取列索引

x = t(data.frame(c(11,12,1,14,15))) 
colnames(x)=c('a','b','c','d','e') 
minimum = apply(x, 1, min) 
minimum 
index = colnames(x)[apply(x, 1, which.min)] 
index 

------------------------------- UPDATE1

我嘗試下面的代碼。 myans_a有5列。但是代碼失敗

#function to find second minimum and associated class name 
min <- function(x,n) { 
    value = sort(x, FALSE)[n] 
    column_name = colnames(x)[which(x == value, arr.ind = TRUE)[2]] 
    paste0("Column:",column_name," , Value:",value) 
} 


myans_a=myans[,c(1:5)] 
min(myans_a,3) 


> min(myans_a,3) 
Show Traceback 

Rerun with Debug 
Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 
    undefined columns selected 
+2

試着用'sort'即'申請(X,1,函數(x)的名稱(排序(X)[2]))' – akrun

+1

看一看[1 ](http://stackoverflow.com/questions/2453326/fastest-way-to-find-second-third-highest-lowest-value-in-vector-or-column)&[2](http:// stackoverflow .com/questions/5569038 /最快速的方式找到索引的第二個第三高的最低價值) – user2100721

回答

1

就在:

colnames(x)[apply(x, 1, order)] 
#[1] "c" "a" "b" "d" "e" 
1

您可以使用下面的函數
這裏ñ第n個最小值的數量

第一步:採摘第n個值。由於數據按照升序排序,因此是第n個最小值。
第二步:比較所有的值與第n個最小值,並挑選第n個最小值
arr.value =「TRUE」的相應列示出的行號和列號的值,其中所述條件爲真。

x = t(data.frame(c(11,12,1,14,15))) 
colnames(x)=c('a','b','c','d','e') 

min <- function(x,n) { 
     value = sort(x, FALSE)[n] 
     column_name = colnames(x)[which(x == value, arr.ind = TRUE)[2]] 
     paste0("Column:",column_name," , Value:",value) 
} 


min(x,1) # first minimum value and corresponding column name 
min(x,2) # second minimum value and corresponding column name 
.... 

輸出:
enter image description here 讓我知道任何疑問的情況下。

+0

如何獲得列索引? – user2543622

+0

我已經將其納入查詢。檢查出來,讓我知道你是否還有疑問。 –

+0

我試圖使用'min(myans [,c(0:5)],3)'myans前5列我想從哪裏找到最小值,但是我得到一個錯誤''錯誤'[.data.frame '(x,order(x,na.last = na.last,decrease = decrease)): 未定義列選擇' – user2543622

1

由akrun評論下面的作品。下面的代碼會給第二最低...

minimum2=apply(dataframe_name, 1, function(x) (sort(x))[2]) 
index2=apply(dataframe_name, 1, function(x) names(sort(x)[2])) 
相關問題