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

如何在Tidyverse框架下找出tibble所有字符串列的全局最小值?

问题:在Tidyverse框架下求tibble所有列的全局最小值

给定如下tibble:

library(tibble)
t <- tibble(
  x = c("a", "b", "c"),
  y = c("d", "e", "f"),
  z = c("g", "h", "i")
)

想要找出所有列中所有值的最小值,但直接调用min(t)会报错:

Error in FUN(X[[i]], ...) : 
  only defined on a data frame with all numeric-alike variables

目前只能通过手动拼接向量的方式实现(如min(c(t$x, t$y, t$z))),但列数较多时扩展性差。注:假设min对字符串的处理结果符合预期。


最优实现方式

方法1:宽表转长表后计算(最贴合Tidyverse理念)

通过tidyr::pivot_longer将所有列合并为单一值列,再提取向量计算最小值,逻辑清晰、可读性强,还能方便扩展到分组计算等场景:

library(dplyr)
library(tidyr)

t_min <- t %>%
  pivot_longer(cols = everything(), values_to = "value") %>%
  pull(value) %>%
  min()
# 输出结果:"a"

方法2:函数式迭代求最小值

利用purrr::reduce迭代处理每一列,逐步将列与当前最小值比较,最终得到全局最小值,适合偏好函数式编程的场景:

library(purrr)

t_min <- t %>%
  reduce(min)
# 输出结果:"a"

方法3:扁平化数据后计算(最简洁)

直接将tibble扁平化为原子向量,再调用min,代码简洁高效:

t_min <- t %>%
  unlist() %>%
  min()
# 输出结果:"a"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:06:19