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

如何使用Tidyverse按列计算2*min{x, 1-x}值

Tidyverse 实现逐列计算2*min(x, 1-x)的方案

测试数据与需求

首先构造测试数据集:

library(tidyverse)
tibble(var1.q = 0.01, var2.q = .99, var3.q = .45) -> foo

需求为对数据集每一列计算2 * min(x, 1-x),已有的base R参考实现如下,可得到预期结果:

2*apply(bind_rows(foo, 1-foo), 2, FUN=min)

预期输出:

var1.q var2.q var3.q 
  0.02   0.02   0.90 

Tidyverse 写法

最简洁的原生Tidyverse实现不需要拼接行,直接用dplyr的逐列操作语法即可:

foo %>%
  summarise(across(
    .cols = everything(),
    .fns = ~ 2 * pmin(.x, 1 - .x)
  ))

实现关键点:

  • 用across(everything())选中所有列执行统一运算,符合Tidyverse逐列操作的规范语法
  • 用向量化函数pmin()代替普通的min(),实现逐元素取最小值,避免min()只返回全局单值的问题
    如果需要和base R输出格式一致的命名向量,可以在后面接unlist():
foo %>%
  summarise(across(everything(), ~ 2 * pmin(.x, 1 - .x))) %>%
  unlist()

运行后输出和预期结果完全匹配。


内容的提问来源于stack exchange,提问作者Otto Kässi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:42:16