2017-12-09 99 views
6

ध्यान में रखते हुए एक सामान्य मैट्रिक्स nxn - उदाहरण के लिए:योग - आर

A <- matrix(1:16, nrow = 4, ncol = 4) 

मैं कैसे "सही कम" त्रिकोण में पंक्तियों की योग की गणना और एक में जानकारी दे सकता है वेक्टर?

example

उत्तर

1

यहाँ एक समाधान है। कुंजी lower.tri या upper.tri फ़ंक्शन का उपयोग करना है, और फिर प्रत्येक पंक्ति या कॉलम को क्रमबद्ध करने के लिए apply का उपयोग करें। अंत में प्रत्येक पंक्ति के योग की गणना करें।

# Create example data frame 
m <- matrix(1:16, 4) 
m 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 5 9 13 
# [2,] 2 6 10 14 
# [3,] 3 7 11 15 
# [4,] 4 8 12 16 

# Calculate the sum 
rowSums(m * apply(lower.tri(m), 1, sort)) 
# [1] 0 14 26 36 

rowSums(m * apply(upper.tri(m), 2, sort)) 
# [1] 0 14 26 36 
2
A = matrix(1:16, 4) 
A 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 5 9 13 
# [2,] 2 6 10 14 
# [3,] 3 7 11 15 
# [4,] 4 8 12 16 

sapply(1:NROW(A), function(i) sum(tail(A[i,], i - 1))) 
#[1] 0 14 26 36 
6

एक मुखौटा समाहित है कि डेटा वांछित खोजें:

> mask <- apply(lower.tri(A, diag = FALSE), 1, rev) 
> mask 
     [,1] [,2] [,3] [,4] 
[1,] FALSE FALSE FALSE FALSE 
[2,] FALSE FALSE FALSE TRUE 
[3,] FALSE FALSE TRUE TRUE 
[4,] FALSE TRUE TRUE TRUE 

गुणा इस मुखौटा और गणना रकम:

> A * mask 
    [,1] [,2] [,3] [,4] 
[1,] 0 0 0 0 
[2,] 0 0 0 14 
[3,] 0 0 11 15 
[4,] 0 8 12 16 

> rowSums(A * mask) 
[1] 0 14 26 36 
+5

कैसे सिर्फ 'rowSums के बारे में (ए * lower.tri (ए) [, ncol (ए): 1]) ' –