获取每行中最大值的列名

时间:2016-03-29 03:27:49

标签: r data-cleaning

我有一个类似于以下内容的数据集 -

cluster1      cluster2      cluster3
0.0795604798  0.0934697636 -0.396044650
0.0086171605 -0.1467907623 -0.396044650
1.8838058726 -0.1507548515 -0.396044650

我想获取每行的簇号,这将是最大值。看起来应该是这样的 -

value           cluster
0.0934697636    cluster2
0.0086171605    cluster1
1.8838058726    cluster1

我在R中这样做。如果我使用以下命令,我会从每一行获得最大值 -

k=colnames(apply(cscore,1,max))

但我不确定如何获取群集名称。

1 个答案:

答案 0 :(得分:4)

我们可以使用max.col获取每行的最大值的列索引,cbind使用行索引来提取每行中的最大'value'('value'),以及使用列索引获取相应的列名('cluster')。

j1 <- max.col(df1, "first")
value <- df1[cbind(1:nrow(df1), j1)]
cluster <- names(df1)[j1]
res <- data.frame(value, cluster)
res
#       value  cluster
#1 0.093469764 cluster2
#2 0.008617161 cluster1
#3 1.883805873 cluster1