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

如何在dplyr中对列子集执行按行求最小值操作?

解决方案

方法1:用rowwise() + c_across()(tidyverse标准方案)

这是最直观的按行处理方式,先通过rowwise()指定按行计算,再用c_across()选中所有以_train/_test结尾的列,最后取每行的最小值:

library(dplyr)

# 处理数据集,新增两列
result_processed <- result %>%
  rowwise() %>%
  mutate(
    min_train = min(c_across(ends_with("_train"))),
    min_test = min(c_across(ends_with("_test")))
  ) %>%
  ungroup() # 记得取消行分组,避免影响后续操作

方法2:用pmin()直接逐行取最小

如果不想用行分组,也可以用pmin()函数,配合列选择和解引用语法来实现:

result_processed <- result %>%
  mutate(
    min_train = pmin(!!!select(., ends_with("_train"))),
    min_test = pmin(!!!select(., ends_with("_test")))
  )

验证结果

处理完后查看第一行数据:

  • min_train为0.0707(对应m4_train的数值)
  • min_test为0.0618(对应m1_test的数值),完全符合需求。

之前尝试失败的原因

你用的mutate(vars(ends_with("_train")))写法有误,vars()是用来定义变量选择规则的工具,不能直接在mutate里作为计算参数,必须搭配c_across()或者解引用(!!!)这类方式,把选中的列传递给计算函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:07:41