Xét một ma trận nxn chung - ví dụ:Sum của một số vị trí liên tiếp - R
A <- matrix(1:16, nrow = 4, ncol = 4)
Làm thế nào tôi có thể tính toán tổng của các hàng trong "phía dưới bên phải" tam giác và hiển thị các thông tin trong một vector?
Xét một ma trận nxn chung - ví dụ:Sum của một số vị trí liên tiếp - R
A <- matrix(1:16, nrow = 4, ncol = 4)
Làm thế nào tôi có thể tính toán tổng của các hàng trong "phía dưới bên phải" tam giác và hiển thị các thông tin trong một vector?
Đây là giải pháp. Điều quan trọng là sử dụng chức năng lower.tri
hoặc upper.tri
, sau đó sử dụng apply
để sắp xếp từng hàng hoặc cột. Cuối cùng tính tổng của mỗi hàng.
# 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
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
Tìm một mặt nạ mà gói gọn các dữ liệu mong muốn:
> 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
Multiply mặt nạ này và tính toán số tiền:
> 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
Làm thế nào về chỉ 'rowSums (A * lower.tri (A) [, ncol (A): 1]) ' –