在矩阵中,如何确定具有最大rowsums
的行。例如,在以下矩阵中:
- A P S T
- 1 0 0 0 0
A 0 0 0 0 1
C 0 0 0 1 0
P 0 2 0 2 0
S 0 0 0 23 3
T 0 0 1 0 0
行S& P有两个最大的rowsums
。
答案 0 :(得分:5)
无需使用名称,您可以轻松完成:
> Rsum <- rowSums(mat)
> mat[tail(order(Rsum),2),]
- A P S T
P 0 2 0 2 0
S 0 0 0 23 3
答案 1 :(得分:4)
你可以这样做:
# Build your example matrix
mat = matrix( data=c( 1,0,0,0,0, 0,0,0,0,1, 0,0,0,1,0, 0,2,0,2,0, 0,0,0,23,3, 0,0,1,0,0 ), ncol=5, byrow=T )
rownames( mat ) = c( '-', 'A', 'C', 'P', 'S', 'T' )
colnames( mat ) = c( '-', 'A', 'P', 'S', 'T' )
# Get the sums
sums = rowSums( mat )
# Get the top 2 row names
top.names = names( sums[ order( sums, decreasing=TRUE ) ][ 1:2 ] )
# Filter the original matrix to include just these two
mat[ rownames( mat ) %in% top.names, ]
哪个输出
- A P S T
P 0 2 0 2 0
S 0 0 0 23 3
答案 2 :(得分:2)
以易于重现的格式粘贴矩阵,以便其他人检查您的问题:
m <- structure(list(X. = c(1L, 0L, 0L, 0L, 0L, 0L), A = c(0L, 0L,
0L, 2L, 0L, 0L), P = c(0L, 0L, 0L, 0L, 0L, 1L), S = c(0L, 0L,
1L, 2L, 23L, 0L), T = c(0L, 1L, 0L, 0L, 3L, 0L)), .Names = c("X.",
"A", "P", "S", "T"), class = "data.frame", row.names = c("-",
"A", "C", "P", "S", "T"))
您可以使用dput
获取它,例如:dput(YourMatrix)
。这可能对您将来的问题有用:)
回到问题 - 对rowSums
进行排序,并通过以下方式获取姓名:
t <- names(sort(rowSums(m)))
获得前两个:
> t[(length(t)-1):length(t)]
[1] "T" "S"
或者通过以下方式获取所需的行:
> d[t[(length(t)-1):length(t)],]
T S
- 0 0
A 1 0
C 0 1
P 0 2
S 3 23
T 0 0