如何在R中自动汇总数据框numeric列,修复现有代码无法运行的问题
R语言数据框数值列自动汇总实现方案
错误原因说明
你提供的两段代码无法运行的核心问题是:
across()是dplyr的专属列操作函数,必须嵌套在summarise()、mutate()这类dplyr表级操作动词内部使用,直接传入普通函数sum()中无法识别上下文的数据框,也无法完成列筛选。where()是tidyselect的条件筛选辅助函数,只能在列选择上下文(如select()、across()内部)生效,单独放入sum()中没有作用,sum()会尝试直接对整个数据框对象求和,逻辑不成立。
正确实现代码
场景1:计算所有数值型列的总求和(返回单个汇总值)
写法1:标准tidyverse写法
library(tidyverse) df <- tibble(label=LETTERS[1:8], x = rep(2:5, each = 2) / 2, y = rep(2:3, each = 4) / 2) # 实现所有数值列总求和 df %>% summarise(total_num = sum(across(where(is.numeric))))
写法2:先筛选数值列再直接求和
df %>% select(where(is.numeric)) %>% sum()
场景2:分别计算每个数值列的汇总值(返回各列汇总结果)
# 每个数值列单独计算总和 df %>% summarise(across(where(is.numeric), sum))
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

