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

dplyr使用across对数据框不同列执行条件汇总逻辑错误如何解决

问题原因

你原有代码的判断逻辑错误根源在于:across()传入匿名函数的.指代的是当前遍历到的单列向量,不是整个数据框,因此names(.)无法获取当前列的名称,条件判断失效,导致所有列都执行了求和逻辑。

修正方案

使用dplyr内置的cur_column()函数获取当前遍历的列名做判断,同时显式指定weighted.mean的wt参数即可:

library(dplyr)
dt <- data.frame(col0 = c(1,2,3), 
                 col1 = c(0.1,0.2,0.3), 
                 col2 = c(0.2,0.3,0.4), 
                 col3 = c(0.1,0.2,0.3), 
                 col4 = c(0.2,0.3,0.4))

dt %>%
  summarise(across(everything(), ~ if(cur_column() != "col0") {
    weighted.mean(x = ., wt = col0, na.rm = TRUE) 
  } else {
    sum(., na.rm = TRUE)
  }))
运行结果
col0      col1      col2      col3      col4
1    6 0.2333333 0.3333333 0.2333333 0.3333333

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:27:04