2013-07-12 10 views
43

में अधिकतम मान की पंक्ति और कॉलम अनुक्रमणिका खोजें I मैट्रिक्स का अधिकतम तत्व-मान और यह स्थान (मैट्रिक्स में पंक्ति और कॉलम आईडी में) ढूंढना चाहता हूं।मैट्रिक्स

मै मैट्रिक्स की पंक्ति और कॉलम को वापस करने के लिए निम्न फ़ंक्शन का उपयोग कर रहा हूं।

यह एक खराब हैक की तरह लगता है - यह ऐसी चीज है जहां मैं शायद मूल विधि खो रहा हूं। क्या कोई बेहतर/और आर तरीका है?

यहाँ मेरी समारोह है:

mm <- matrix(rnorm(100), 10, 10) 
maxCords <- matxMax(mm) 
mm[maxCords] 
+0

समाधान एक जैसा है, लेकिन मैंने खोज की और मुझे लगता है कि अधिकतम और न्यूनतम दोनों के बीच समाधान करने का एक मामला है (जिसे मैंने मिनट के लिए भी खोजना याद किया था)। इसके अलावा, समारोह (हालांकि इस मामले में अनावश्यक) कुछ शैक्षिक मूल्य का हो सकता है। – ricardo

उत्तर

83

आप कर सकता है

## Some data 
set.seed(123) 
mm <- matrix(rbinom(40, 20, 0.5), 8, 5) 
mm 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 9 10 8 11 11 
# [2,] 12 10 6 11 12 
# [3,] 9 14 9 10 6 
# [4,] 13 10 14 11 10 
# [5,] 13 11 13 9 12 
# [6,] 6 10 11 8 8 
# [7,] 10 7 11 14 9 
# [8,] 13 13 16 13 8 

which(mm == max(mm), arr.ind = TRUE) 
#  row col 
# [1,] 8 3 
+3

दूसरे अधिकतम मूल्य के स्थान को खोजने का कोई तरीका है? दूसरा अधिकतम मूल्य पहले अधिकतम मान के समान हो सकता है और उस स्थिति में मैं दूसरे अधिकतम मूल्य का स्थान प्राप्त करना चाहता हूं जो पहले अधिकतम मान के समान होगा। – user2543622

+3

@ user2543622, क्या आपने अपने सेटअप में एक उदाहरण पर प्रस्तावित समाधान की कोशिश की है? प्रस्तावित समाधान मैट्रिक्स के सभी तत्वों की सूची प्रदान करता है जो अधिकतम के बराबर हैं। तो यदि संबंध हैं तो आप उन्हें सब कुछ प्राप्त करेंगे। – QuantIbex

0

कैसे इन के बारे में:

matxMax <- function(mtx) 
{ 
    colmn <- which(mtx == max(mtx)) %/% nrow(mtx) + 1 
    row <- which(mtx == max(mtx)) %% nrow(mtx) 
    return(matrix(c(row, colmn), 1)) 
} 

मैं का उपयोग इस प्रकार है?

which.min(mm) 
which.max(mm) 
+5

न तो 'which.एमएक्स 'जो। Max' सरणी सूचकांक वापस नहीं करता है। दोनों अपने मैट्रिक्स को वेक्टर के रूप में देखते हैं और पंक्ति और कॉलम इंडेक्स के बजाय वेक्टर इंडेक्स लौटाते हैं। –