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

dplyr中`across(everything(), ...)`是否有简洁替代写法?

替代across(everything(), ...)的简洁写法(批量应用多函数)

以下是几种不同工具链的解决方案,覆盖dplyr及其他常用R工具:

dplyr 环境下的写法

dplyr 1.1.0后要求across()必须明确指定.cols参数,你提供的across(everything(), lst(min, max))已经是该框架下的简洁写法(.cols是across()的第一个参数,可省略参数名)。完整实现代码:

library(dplyr)
mtcars |> 
  summarize(across(everything(), lst(min, max))) |> 
  pivot_longer(everything(), names_to = c("var", ".value"), names_sep = "_")

若暂时不介意使用已弃用函数,summarize_all()写法更短,但官方不推荐长期依赖:

mtcars |> 
  summarize_all(lst(min, max)) |> 
  pivot_longer(everything(), names_to = c("var", ".value"), names_sep = "_")

data.table 高效写法

data.table语法更紧凑,无需额外转置步骤即可生成目标格式:

library(data.table)
setDT(mtcars)[, lapply(.SD, \(x) .(min = min(x), max = max(x)))] |> 
  melt() |> 
  dcast(L1 ~ value2, value.var = "value")

base R 原生实现

无需加载任何扩展包,通过sapply()直接生成结果矩阵再整理:

sapply(mtcars, \(x) c(min = min(x), max = max(x))) |> 
  t() |> 
  data.frame(var = rownames(.), check.names = FALSE) |> 
  subset(select = c(var, min, max))

purrr 函数式写法

结合purrr的map_dfr()可一步生成目标tibble:

library(purrr)
mtcars |> 
  map_dfr(\(x) data.frame(min = min(x), max = max(x)), .id = "var")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33