如何在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
相关产品推荐
相关产品推荐

