如何在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
相关产品推荐
相关产品推荐

