R - get the column index of a matrix based on a function for each row -
& gt; सेट.सेड (2014) & gt; एम एंड एलटी; -मैट्रिक्स (नमूना (10,16, स्थान = TRUE), नेरो = 4) & gt; [4,] 4 7 1 5 [मीट्रिक टन] [4,] 4 7 1 5 एम [, 1] [, 2] [, 3] [, 4] [1,] 3 6 1 7 [2,] 2 1 2 6 [3,] 7 10 7 7 [ / कोड> प्रत्येक पंक्ति के लिए, मैं उस पंक्ति का पहला तत्व प्राप्त करना चाहता हूं जो कि अंतिम तत्व के बराबर या उसके बराबर है, और अन्यथा नहीं। इसलिए, पंक्ति 1 के लिए, पहले तीन कॉलम में कोई तत्व नहीं> = 7 हैं, इसलिए एनए को वापस करना चाहिए। 3 पंक्ति के लिए, पहला तत्व> = 7 है इसलिए 1 लौटा जाना चाहिए।
इसका परिणाम लम्बाई 4 के बराबर होना चाहिए (एनए, एनए, 1, 2)
मैंने सोचा था कि समाधान लागू हो सकता है लेकिन मैं समझ नहीं पाया कि यह कैसे सही हो। इसके अलावा, कृपया ध्यान रखें कि मेरी असली मैट्रिक्स में लाखों पंक्तियाँ हो सकती हैं।
धन्यवाद
एक और प्रयास:
लागू करें (मी [, - ncol (मी)]> gt; = m [, ncol (m)], 1, मैच, x = TRUE) # [ 1] एनए 1 2 या को लागू करें
:
chk & lt; - m [, - ncol (मी) ]> Gt; = m [, ncol (m)] को बदलना (max.col (chk, "प्रथम"), पंक्ति ससुरा (chk) == 0, एनए) # [1] एनए 1 2
यह अंतिम रूप से छोड़कर सभी m
स्तंभों का एक तर्कसंगत मैट्रिक्स बनाता है, यदि मान हैं & gt; =
पिछले कॉलम मूल्यों के लिए फिर >> प्रत्येक पंक्ति में पहला TRUE
की स्थिति मैच
का उपयोग करके निकाली जाती है।
बेन के समाधान के विरुद्ध बड़ी मैट्रिक्स का उपयोग करके गति की जांच:
m & lt; -matrix (नमूना (10,1.6e6, प्रतिस्थापन = TRUE), nrow = 4e5) दोहराएं (5, system.time (लागू (m [, - ncol (m)] & gt; = m [, एनओसीएल (एम)], 1, मैच, एक्स = ट्रू) # 0aps 0.7 0.77 0.77 0.76 0.93 दोहराना (5, सिस्टम। समय ({एम 2 और एलटी; - स्वीप (एम, 1, एम [, एनएकल (एम) ), "(एम 2,1, फ़ंक्शन (x) जो (एक्स) [1]) एफ़ेल (वी == एनएक्सएल (एम), एनए, वी)})) # कैप्टन 1.11 1.04 1.10 1.06 1.06
Comments
Post a Comment