查找分组最大值并在R中打印相关行

时间:2019-04-12 13:07:10

标签: r dataframe groupwise-maximum

我有一个这样的数据框:

HandleProcessCorruptedStateExceptionsAttribute

V1-V5是数据列,MAX在每一行中显示最高绝对值的列名,而ROW只是行计数器。

我想找到按ROW编号给出的按MAX分组的每一列的绝对最大值。

例如:

V1中的Maxima位于R2和R8行中,因此我比较了R2和R8两行的V1列。它的12和18,所以R8是我想要得到的结果。

V2在R7和R9行中,因此我比较了R7和R9的V2列。它的-9和-4,因此结果将是-9的R7(符号无关紧要)。

到目前为止,我只是根据MAX对数据进行了子集化,所以我得到了5个单独的数据帧,然后手动对相关列进行了排序。有没有更快的方法?

2 个答案:

答案 0 :(得分:2)

您没有指定如何构造输出,但这是tidyverse的想法,我们在其中融合数据帧并进行过滤,即

library(tidyverse)

df %>%
 gather(var, val, - c(6, 7)) %>%
 filter(MAX == var) %>%
 group_by(MAX) %>%
 slice(which.max(abs(val))) %>%
 select(-var)

给出,

# A tibble: 5 x 3
# Groups:   MAX [5]
  MAX   ROW     val
  <fct> <fct> <int>
1 V1    R8       18
2 V2    R7       -9
3 V3    R11      27
4 V4    R5       15
5 V5    R1      -20

答案 1 :(得分:2)

另一种dpylr可能性是:

df %>%
 group_by(MAX) %>%
 mutate(res = max(abs(eval(as.symbol(MAX))))) %>%
 filter(res == abs(eval(as.symbol(MAX))))

     V1    V2    V3    V4    V5 MAX   ROW     res
  <int> <int> <int> <int> <int> <chr> <chr> <int>
1     2     5    -8    19   -20 V5    R1       20
2     6     1    -1    15     9 V4    R5       15
3    -6    -9     3     6     2 V2    R7        9
4    18    11    -3    13     2 V1    R8       18
5    -7    -5    27     3     1 V3    R11      27

在这里,首先将“ MAX”分组,将“ MAX”评估为符号并返回最大绝对值。然后,它使行具有最大绝对值。