如何在R的tidyverse中自动获取数值列并传入pmin等函数
在tidyverse中批量获取所有数值列的行最小值
当需要自动识别所有数值列并计算每行的最小值时,你之前的写法问题在于pick(where(is.numeric))返回的是一个数据框,而pmin需要接收多个独立的向量参数,而非单个数据框。下面提供两种可行的解决方法:
方法一:使用拼接运算符!!!拆分列参数
通过!!!将pick选中的列拆分为独立参数传递给pmin,即可正确计算每行最小值:
df <- data.frame(V1= runif(3, 1, 10), V2 = runif(3, 1, 10), V3 = runif(3, 1, 10)) df |> dplyr::mutate(min_val = pmin(!!!dplyr::pick(dplyr::where(is.numeric))))
运行后会新增min_val列,存储每行所有数值列的最小值。
方法二:使用c_across结合逐行处理
利用rowwise()将数据框转为逐行处理模式,通过c_across将每行的数值列组合成向量,再用min计算最小值:
df <- data.frame(V1= runif(3, 1, 10), V2 = runif(3, 1, 10), V3 = runif(3, 1, 10)) df |> dplyr::rowwise() |> dplyr::mutate(min_val = min(dplyr::c_across(dplyr::where(is.numeric)))) |> dplyr::ungroup()
注意最后用ungroup()取消逐行模式,避免后续操作受影响。
内容的提问来源于stack exchange,提问作者ynsec37
相关产品推荐
相关产品推荐

