在每一行中找到最大值并报告列名

时间:2019-04-11 13:46:20

标签: r dataframe

我有一个这样的数据框:

 V1      V2     V3    
 0.4    -0.9    0.6
 0.8    -0.2    0.4
-0.6     0.1    0.8

我想获得最大值(符号无关紧要),并在最后一列中打印出具有最高值的列的名称。

我想要这个:

 V1      V2     V3     MAX 
 0.4    -0.9    0.6    V2
 0.8    -0.2    0.4    V1
-0.6     0.1    0.8    V3

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

我们可以对数据帧的绝对值使用max.col

df$MAX <- names(df)[max.col(abs(df))]

df
#    V1   V2  V3 MAX
#1  0.4 -0.9 0.6  V2
#2  0.8 -0.2 0.4  V1
#3 -0.6  0.1 0.8  V3

类似地,我们还可以逐行使用apply解决方案来从每一行中获取最大值

names(df)[apply(abs(df), 1, which.max)]
#[1] "V2" "V1" "V3"

数据

df <- structure(list(V1 = c(0.4, 0.8, -0.6), V2 = c(-0.9, -0.2, 0.1
), V3 = c(0.6, 0.4, 0.8)), class = "data.frame", row.names = c(NA, 
-3L))