在 R 中查找三列中的最大值

use*_*454 2 r max dplyr

我想找到三列中每行的最大值,并让新列打印最高值列的名称。

示例表如下所示:

x = c(1,2,5,4,5 ) 
y = c(2,3,3,1,1 )
z = c(4,4,2,1,1 )
df<-data.frame(x,y,z)
Run Code Online (Sandbox Code Playgroud)

我想创建这个:

ID X y z 最大限度
1 1 2 4 z
2 2 3 4 z
3 5 3 2 X
4 4 1 1 X
5 5 1 1 X

我试过:

df%>% rowwise() %>% mutate(max = max(x, y, z))
Run Code Online (Sandbox Code Playgroud)

并收到输出:

ID X y z 最大限度
1 1 2 4 4
2 2 3 4 4
3 5 3 2 5
4 4 1 1 4
5 5 1 1 5

有谁知道我如何纠正此代码以产生所需的结果?

akr*_*run 6

使用pmax而不是max因为它矢量化并且不需要经过rowwise(这应该非常慢)

\n
library(dplyr)\ndf %>% \n    mutate(Max = pmax(x, y, z))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

在OP的函数 with 中rowwise,如果我们需要列名,则使用which.max来获取列索引

\n
df %>%\n  rowwise %>%\n  mutate(Max = names(.)[which.max(c(x, y, z))]) %>%\n  ungroup\n
Run Code Online (Sandbox Code Playgroud)\n

-输出

\n
# A tibble: 5 \xc3\x97 4\n      x     y     z Max  \n  <dbl> <dbl> <dbl> <chr>\n1     1     2     4 z    \n2     2     3     4 z    \n3     5     3     2 x    \n4     4     1     1 x    \n5     5     1     1 x    \n
Run Code Online (Sandbox Code Playgroud)\n
\n

或者使用 Vectorizeidmax.col查找每一行中具有最大值的列索引,并获取names与该索引对应的列索引

\n
df %>% \n    mutate(Max = names(.)[max.col(., 'first')])\n
Run Code Online (Sandbox Code Playgroud)\n

-输出

\n
  x y z Max\n1 1 2 4   z\n2 2 3 4   z\n3 5 3 2   x\n4 4 1 1   x\n5 5 1 1   x\n
Run Code Online (Sandbox Code Playgroud)\n