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

如何在across()中引用未选中列?按对应status列计算x列均值

解决方案:用across()+cur_data()实现动态计算对应status列的均值

你的代码无法运行大概率是因为未加载stringr包(str_c()需要依赖它),另外用cur_data()替代外部df引用,更适配管道中的动态数据场景。

修改后的可运行代码

先确保加载必要的包:

library(dplyr)
library(stringr)

执行以下代码即可得到目标结果:

df |>
  summarize(
    across(
      # 精准匹配所有x开头的数值列,替代!matches("_")更严谨
      matches("^x\\d+$"),
      \(col) {
        status_col <- str_c(cur_column(), "_status")
        # 用cur_data()获取当前管道中的数据集,避免依赖外部定义的df
        mean(col[cur_data()[[status_col]]], na.rm = TRUE)
      },
      .names = "mean_{col}"
    )
  )

运行后输出:

# A tibble: 1 × 3
  mean_x1 mean_x2 mean_x3
    <dbl>   <dbl>   <dbl>
1       2       8      14

关键说明

  • cur_data()会引用管道当前步骤的数据集,无论数据框是静态定义还是动态生成,都能正确获取对应的_status列,完全不需要依赖外部的df变量。
  • 如果不想加载stringr包,可以用基础R的paste0()替代str_c(),代码如下:
df |>
  summarize(
    across(
      matches("^x\\d+$"),
      \(col) {
        status_col <- paste0(cur_column(), "_status")
        mean(col[cur_data()[[status_col]]], na.rm = TRUE)
      },
      .names = "mean_{col}"
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:57:27