我想找到三列中每行的最大值,并让新列打印最高值列的名称。
示例表如下所示:
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 |
有谁知道我如何纠正此代码以产生所需的结果?
使用pmax而不是max因为它矢量化并且不需要经过rowwise(这应该非常慢)
library(dplyr)\ndf %>% \n mutate(Max = pmax(x, y, z))\nRun Code Online (Sandbox Code Playgroud)\n在OP的函数 with 中rowwise,如果我们需要列名,则使用which.max来获取列索引
df %>%\n rowwise %>%\n mutate(Max = names(.)[which.max(c(x, y, z))]) %>%\n ungroup\nRun 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 \nRun Code Online (Sandbox Code Playgroud)\n或者使用 Vectorizeidmax.col查找每一行中具有最大值的列索引,并获取names与该索引对应的列索引
df %>% \n mutate(Max = names(.)[max.col(., 'first')])\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n