You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的dplyr中提取每行跨列的最大值?

解决dplyr中逐行提取多列最大值的问题

你之前的代码失败是因为col1:coln无法直接传递给max()函数,需要用dplyr专门的函数来按行提取列值。下面提供两种可行的方案:

方案1:rowwise() + c_across()

这是最直观的按行处理方式,适合理解逻辑:

library(tidyverse)

set.seed(123)
df <- tibble(id=seq(1:5), col1=runif(5,100,1000), col2=runif(5,100,1000),coln=runif(5,200,1000))

df %>%
  rowwise() %>%
  mutate(max = max(c_across(col1:coln))) %>%
  ungroup() # 取消行分组,避免后续操作性能下降

c_across(col1:coln)会在每行中提取col1到coln范围的所有列值,转换成向量后再用max()计算每行的最大值。

方案2:pmax() + across()(推荐大型数据集)

如果你的数据框很大,rowwise()的性能会比较差,推荐用向量化的pmax()函数,不需要行分组:

df %>%
  mutate(max = pmax(across(col1:coln), na.rm = TRUE))

across(col1:coln)会选中目标列,pmax()会逐行计算这些列的最大值,na.rm=TRUE用于处理可能存在的缺失值(如果你的数据没有缺失值也可以省略,但加上更稳妥)。

运行上述任意代码后,都会得到你想要的结果:

#> # A tibble: 5 × 5
#>      id  col1  col2  coln   max
#>   <int> <dbl> <dbl> <dbl> <dbl>
#> 1     1  359.  141.  965.  965.
#> 2     2  809.  575.  563.  809.
#> 3     3  468.  903.  742.  903.
#> 4     4  895.  596.  658.  895.
#> 5     5  946.  511.  282.  946.

内容的提问来源于stack exchange,提问作者LDT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:55:21