我有以下格式的矩阵/数据框M
A B C D E
2 0 0.132041187 0.100847971 0.000000 0.76711084
4 0 0.132041187 0.100847971 0.000000 0.76711084
5 0 0.001506186 0.005164067 0.982894 0.01043572
7 0 0.132041187 0.100847971 0.000000 0.76711084
11 0 0.001506186 0.005164067 0.982894 0.01043572
14 0 0.132041187 0.100847971 0.000000 0.76711084
我需要将具有最大值的行名称和列名称提取到新数据框。
我试过max.col()
,但是,这就是我得到的:
head( colnames(M)[max.col(M, ties.method="first"), drop=FALSE])
[1] "E" "E" "D" "E" "D" "E"
结果不存储行名称。如何解决这个问题?
答案 0 :(得分:2)
max.col
仅为每行提供列索引。使用该索引获取相应的列名称。对于rownames
,我们可以使用rownames(M)
并使用这些信息创建新的data.frame
。为了得到'值',我们cbind
使用列索引的行索引,并根据它提取'M'中的相应元素。
i1 <- max.col(M, ties.method="first")
data.frame(rn=rownames(M), cn= colnames(M)[i1],
value= M[cbind(seq_len(nrow(M)), i1)])
# rn cn value
#1 2 E 0.7671108
#2 4 E 0.7671108
#3 5 D 0.9828940
#4 7 E 0.7671108
#5 11 D 0.9828940
#6 14 E 0.7671108