2017-12-09 1 views
6

고려 일반적인 매트릭스 NXN - 예 :합계 - R

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에 대한 (A *의 lower.tri (A) [, ncol (A) : 1])' –