如何选择行方式最大值并按列名标记

时间:2016-03-20 05:19:07

标签: r dataframe

我有一个5列数据框,带有概率值。

5列是目标变量值我想要一个额外的列,用于标记每行具有目标值的最大概率。救命?

例如:

  id    columnA columnB columnC columnD FinalTag 
  1112  0.653   0.33    0.01    0.006    "A"

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,这将是一种可能性。但是,可能有更简单的方法来获得这个结果。

df1$FinalTag <- gsub("column", "", names(sapply(1:nrow(df1),
                                        function(x) which.max(df1[x,-1]))))

#     id columnA columnB columnC columnD FinalTag
# 1 1112   0.653   0.330    0.01   0.006        A
# 2 1114   0.234   0.581    0.10   0.085        B

修改

正如@DavidArenburg所建议的那样,事实上可以以更紧凑的形式获得相同的结果:

df1$FinalTag <- sub("column", "", names(df1)[-1][max.col(df1[-1])])

数据

df1 <- structure(list(id = c(1112L, 1114L), columnA = c(0.653, 0.234), 
        columnB = c(0.33, 0.581), columnC = c(0.01, 0.1), 
        columnD = c(0.006, 0.085)), 
        .Names = c("id", "columnA", "columnB", "columnC", "columnD"),
        class = "data.frame", row.names = c(NA, -2L))