R 创建包含每行最大值的列名的列

Lin*_*pey 6 r

我有与这个问题相同的请求:对于每一行返回最大值的列名

但是,我需要包含每行最大值的所有列的名称。如果我每行有两个相同的最大值,上面链接中提供的所有解决方案都会出现问题。

df <- data.frame(V1=c(2,8,1,5 , 6),V2=c(7,3,5, 7 , 3),V3=c(7,6,4, 5, 1))

df
  V1 V2 V3
1  2  7  7
2  8  3  6
3  1  5  4
4  5  7  5
5  6  3  1
Run Code Online (Sandbox Code Playgroud)

现在,我想提取具有最大值的列名。最多作为 df 中的附加列。有点像这样:

> df
  V1 V2 V3  Max
1  2  7  7  V3_V2
2  8  3  6  V1
3  1  5  4  V2
4  5  7  5  V2
5  6  3  1  V1

Run Code Online (Sandbox Code Playgroud)

谢谢你!

Ron*_*hah 7

您可以使用 rowwiseindplyr并获取具有最大值的行的列名称。

library(dplyr)

df %>%
  rowwise() %>%
  mutate(Max = paste0(names(.)[c_across() == max(c_across())], collapse = '_'))

#     V1    V2    V3 Max  
#  <dbl> <dbl> <dbl> <chr>
#1     2     7     7 V2_V3
#2     8     3     6 V1   
#3     1     5     4 V2   
#4     5     7     5 V2   
#5     6     3     1 V1   
Run Code Online (Sandbox Code Playgroud)

在基本 R 中,您可以使用apply-

df$Max <- apply(df, 1, function(x) paste0(names(df)[x == max(x)],collapse = '_'))
Run Code Online (Sandbox Code Playgroud)