R通过提取行名称和最大列名称来创建数据框

时间:2015-12-15 04:53:54

标签: r

我有以下格式的矩阵/数据框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"

结果不存储行名称。如何解决这个问题?

1 个答案:

答案 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